Bläddra i källkod

Merge remote-tracking branch 'origin/jsh77b' into order

# Conflicts:
#	src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
#	src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
card007 5 år sedan
förälder
incheckning
d085868834

+ 180 - 101
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -70,13 +70,9 @@ public class TsaOrderChangeController extends TsaBaseController {
 		Order order = new Order();
 		ModelAndView mav = new ModelAndView();
 		order.setOrdNo(ordNo);
-		
-		// 2021.01.26 변경시퀀스가 있을때 담기
-		if (ordChgSq > 0) {
-			order.setOrdChgSq(ordChgSq);
-		}
+		order.setOrdChgSq(ordChgSq);
 				
-		// 취소가능 주문상세상탭값 설정
+		// 1. 취소가능 주문상세상탭값 설정
 		String[] ordDtlStatArr = new String[4];
 		ordDtlStatArr[0] = TscConstants.OrderDetailStat.DEPOSIT_WAIT.value();
 		ordDtlStatArr[1] = TscConstants.OrderDetailStat.PAYMENT_COMPLETE.value();
@@ -84,88 +80,39 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[3] = TscConstants.OrderDetailStat.DELIVERY_PREPARE.value();
 		order.setOrdDtlStatArr(ordDtlStatArr);
 		
-		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 합 
+		// 2. 변경신청된 주문상세번호를 체크 후 있으면 해당 취소가능수량값 업데이트 
+		List<Order> cancelRequestTargetList 		= coreOrderChangeService.getCancelRequestTargetList(order);
+		List<Order> orderChangeDetailList 			= coreOrderChangeService.getOrderChangeDetailList(order);
+		Collection<Order> orderInfoList 			= orderService.getOrderInfoList(order);
+		
+		// 3. 화면으로 데이타 전송
+		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));				// 취소사유
-		mav.addObject("cancelRequestTargetList"		, orderChangeService.getCancelRequestTargetList(order));	// 취소요청대상목록
-		mav.addObject("orderInfoList"				, orderService.getOrderInfoList(order));						// 주문정보
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);										// 변경신청대상목록 (취소/반품/교환)
+		mav.addObject("orderInfoList"				, orderInfoList);												// 주문정보
 		mav.addObject("ordNo"						, ordNo);														// 주문번호
 		mav.addObject("ordChgSq"					, ordChgSq);													// 주문변경번호
-		mav.addObject("orderChangeList"				, orderService.getOrderChangeList(order));						// 취소/반품/교환 요청 정보
+		mav.addObject("orderChangeDetailList"		, orderChangeDetailList);										// 변경신청목록 (취소/반품/교환)
 		
 		String viewName = "";
 		
+		/*
 		if (ordChgSq > 0) {
-			viewName = "order/CnclReqViewForm";	// 변경요청정보화면 (취소요청정보화면)
+			viewName = "order/CnclReqViewForm";		// 변경요청확인화면 (취소요청정보화면)
 		} else {
 			viewName = "order/CnclReqForm";		// 변경요청화면 (취소요청화면)
 		}
+		*/
+		
+		viewName = "order/CnclReqForm";		// 변경요청화면, 변경요청확인화면 (취소요청화면) (통합)
 
 		mav.setViewName(viewName);
 		
 		return mav;
 	}
-	
-	/**
-	 * 취소요청 (ADMIN, NAPY, 외부몰) (배치) (사용안함)
-	 * 
-	 * @param OrderChange - 주문취소신청정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2021. 01. 20
-	 */
-	@PostMapping("/cnclReq")
-	@ResponseBody
-	public GagaResponse cnclReq(@RequestBody OrderChange cnclReq) {
-		
-		GagaMap mav = new GagaMap();
-		
-		if (cnclReq== null) {
-			throw new IllegalStateException(message.getMessage("FAIL_1001"));
-		}
-		
-		List<Order> cnclReqList = cnclReq.getCancelReqList(); // 취소요청정보목록
-		
-		// To Do List
-		// @ 결품취소로직 추가
-		// @ 주문취소시 상태값 체크
-		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
-		
-		// 1. 세션회원조회
-		int userNo = TsaSession.getInfo().getUserNo();
-		
-		// 2. 환불금액계산
-		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
-		mav = orderRefundService.cnclRtnRefundAmt(cnclReqList);
-		
-		// 3. 주문변경 기본정보 설정
-		mav.set("ordNo"			, cnclReq.getOrdNo());				// 주문번호
-		mav.set("chgReason"		, cnclReq.getChgReason());			// 변경사유
-		mav.set("chgMemo"		, cnclReq.getChgMemo());			// 변경메모
-		
-		mav.set("accountNo"		, cnclReq.getAccountNo());			// 환불계좌번호
-		mav.set("accountNm"		, cnclReq.getAccountNm());			// 환불계좌예금주명
-		mav.set("bankCd"		, cnclReq.getBankCd());				// 환불계좌은행코드
-		
-		mav.set("allCanYn"		, cnclReq.getAllCanYn());			// 무통장입금전 전체취소 여부
-		mav.set("isCustomer"	, cnclReq.getIsCustomer());			// 변경사유 (고객, 회사)
-		
-		// 4. 주문변경 회수지정보 추가
-		mav.set("chgerNm"		, cnclReq.getChgerNm());			// 변경자명
-		mav.set("chgerEmail"	, cnclReq.getChgerEmail());			// 변경자이메일주소
-		mav.set("chgerPhnno"	, cnclReq.getChgerPhnno());			// 변경자핸드폰번호
-		mav.set("chgerTelno"	, cnclReq.getChgerTelno());			// 변경자전화번호
-		
-		mav.set("reqGbn"		, cnclReq.getReqGbn());				// 신청구분
-						
-		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
-		//orderChangeService.cnclReq(mav, userNo);
-		orderChangeService.cnclComplete(mav, userNo);
-		
-		return super.ok("성공");
-	}
-	
+
 	/**
-	 * 취소요청철회 (NAPY, 외부몰) (관리자)
+	 * 취소요청철회 (관리자)
 	 * @param OrderChange - 주문취소신청정보
 	 * @return
 	 * @author jsh77b
@@ -193,25 +140,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 	}
 	
 	/**
-	 * 취소요청승인 (NAPY, 외부몰) (관리자)
-	 * @param OrderChange - 주문취소신청정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2021. 01. 20
-	 */
-	@PostMapping("/cnclReqComplete")
-	@ResponseBody
-	public GagaResponse cnclReqComplete(@RequestBody OrderChange cnclReq) {
-		
-		if (cnclReq== null) {
-			throw new IllegalStateException(message.getMessage("FAIL_1001"));
-		}
-		
-		return super.ok("성공");
-	}
-	
-	/**
-	 * 취소 요청, 완료 통합 (관리자)
+	 * 취소요청, 취소요청완료, 취소완료 기능 통합 (관리자)
 	 * @param Collection<Order> - 주문취소신청목록
 	 * @return
 	 * @author jsh77b
@@ -227,9 +156,9 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		GagaMap mav = new GagaMap();
 		
-		List<Order> cnclReqList = cnclReq.getCancelReqList(); // 취소요청정보목록
+		List<Order> cnclReqList = cnclReq.getCancelReqList(); // 변경요청정보
 		
-		// To Do List
+		// TODO
 		// @ 결품취소로직 추가
 		// @ 주문취소시 상태값 체크
 		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
@@ -243,6 +172,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		// 3. 주문변경 기본정보 설정
 		mav.set("ordNo"			, cnclReq.getOrdNo());				// 주문번호
+		mav.set("ordChgSq"		, cnclReq.getOrdChgSq());			// 주문변경번호
 		mav.set("chgReason"		, cnclReq.getChgReason());			// 변경사유
 		mav.set("chgMemo"		, cnclReq.getChgMemo());			// 변경메모
 		
@@ -277,12 +207,13 @@ public class TsaOrderChangeController extends TsaBaseController {
 	 * @since 2020. 12. 22
 	 */
 	@GetMapping("/rtn/req/form")
-	public ModelAndView returnRequestFrom(@RequestParam(value = "ordNo") int ordNo) {
+	public ModelAndView rtnReqForm(@RequestParam(value = "ordNo") int ordNo, @RequestParam(value = "ordChgSq") int ordChgSq) {
 
 		Order order = new Order();
 		ModelAndView mav = new ModelAndView();
 		
 		order.setOrdNo(ordNo);
+		order.setOrdChgSq(ordChgSq);
 		
 		// 반품가능 주문상세상탭값 설정
 		String[] ordDtlStatArr = new String[3];
@@ -291,16 +222,25 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[2] = TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value();
 		order.setOrdDtlStatArr(ordDtlStatArr);
 		
+		// 2. 변경신청된 주문상세번호를 체크 후 있으면 해당 취소가능수량값 업데이트 
+		List<Order> cancelRequestTargetList 		= coreOrderChangeService.getCancelRequestTargetList(order);
+		List<Order> orderChangeDetailList 			= coreOrderChangeService.getOrderChangeDetailList(order);
+		Collection<Order> orderInfoList 			= orderService.getOrderInfoList(order);
+		
+		// 3. 화면으로 데이타 전송
+		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G688"));				// 취소사유
-		mav.addObject("cancelRequestTargetList"		, orderChangeService.getCancelRequestTargetList(order));	// 취소요청대상 목록
-		mav.addObject("orderInfoList"				, orderService.getOrderInfoList(order));						// 주문정보
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);										// 취소요청대상 목록
+		mav.addObject("orderInfoList"				, orderInfoList);												// 주문정보
 		mav.addObject("ordNo"						, ordNo);														// 주문번호
+		mav.addObject("ordChgSq"					, ordChgSq);													// 주문변경번호
+		mav.addObject("orderChangeDetailList"		, orderChangeDetailList);										// 변경신청목록 (취소/반품/교환)
 		
 		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));						// 배송정보
 		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));				// 전화번호국번
 		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));				// (휴대전화)번호국번
 
-		mav.setViewName("order/ReturnRequestForm");
+		mav.setViewName("order/RtnReqForm");
 		
 		return mav;
 	}
@@ -312,9 +252,9 @@ public class TsaOrderChangeController extends TsaBaseController {
 	 * @author jsh77b
 	 * @since 2020. 12. 29
 	 */
-	@PostMapping("/returnRequest")
+	@PostMapping("/rtnReq")
 	@ResponseBody
-	public GagaResponse orderReturnRequest(@RequestBody OrderChange rtnReq) {
+	public GagaResponse rtnReq(@RequestBody OrderChange rtnReq) {
 		
 		GagaMap mav = new GagaMap();
 		
@@ -322,7 +262,11 @@ public class TsaOrderChangeController extends TsaBaseController {
 			throw new IllegalStateException(message.getMessage("FAIL_1001"));
 		}
 
-		List<Order> cancelReqList = rtnReq.getCancelReqList(); // 취소요청정보
+		List<Order> cancelReqList = rtnReq.getCancelReqList(); // 변경요청정보
+		
+		// TODO
+		// @ 주문취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
 		
 		// 1. 세션회원조회
 		int userNo = TsaSession.getInfo().getUserNo();
@@ -332,6 +276,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		// 3. 주문변경 기본정보 설정
 		mav.set("ordNo"			, rtnReq.getOrdNo());				// 주문번호
+		mav.set("ordChgSq"		, rtnReq.getOrdChgSq());			// 주문변경번호
 		mav.set("chgReason"		, rtnReq.getChgReason());			// 변경사유
 		mav.set("chgMemo"		, rtnReq.getChgMemo());				// 변경메모
 			
@@ -357,6 +302,34 @@ public class TsaOrderChangeController extends TsaBaseController {
 		return super.ok("성공");
 	}
 	
+	/**
+	 * 취소요청철회 (관리자)
+	 * @param OrderChange - 주문취소신청정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 01. 20
+	 */
+	@PostMapping("/rtnReqCancel")
+	@ResponseBody
+	public GagaResponse rtnReqCancel(@RequestBody OrderChange cnclReq) {
+		
+		if (cnclReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		GagaMap mav = new GagaMap();
+		mav.set("ordNo"			, cnclReq.getOrdNo());
+		mav.set("ordChgSq"		, cnclReq.getOrdChgSq());
+		
+		// 2.취소요청철회 
+		mav = coreOrderChangeService.rtnReqCancel(mav, userNo);
+		
+		return super.ok("성공");
+	}
+	
 	/**
 	 * 주문 취소/반품 신청환불금액 계산
 	 * @param Collection<Order>- 주문취소신청목록
@@ -460,7 +433,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		String accountCheck = "Y";
 		
-		// To Do List
+		// TODO
 		// @ 환불계좌인증
 		
 		if ("Y".equals(accountCheck)) {
@@ -549,6 +522,112 @@ public class TsaOrderChangeController extends TsaBaseController {
 		
 		return result;
 	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * 취소요청 (ADMIN, NAPY, 외부몰) (배치) (사용안함)
+	 * 
+	 * @param OrderChange - 주문취소신청정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 01. 20
+	 */
+	@PostMapping("/cnclReq")
+	@ResponseBody
+	public GagaResponse cnclReq(@RequestBody OrderChange cnclReq) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cnclReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+		
+		List<Order> cnclReqList = cnclReq.getCancelReqList(); // 취소요청정보목록
+		
+		// TODO
+		// @ 결품취소로직 추가
+		// @ 주문취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		// 2. 환불금액계산
+		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
+		mav = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
+		
+		// 3. 주문변경 기본정보 설정
+		mav.set("ordNo"			, cnclReq.getOrdNo());				// 주문번호
+		mav.set("chgReason"		, cnclReq.getChgReason());			// 변경사유
+		mav.set("chgMemo"		, cnclReq.getChgMemo());			// 변경메모
+		
+		mav.set("accountNo"		, cnclReq.getAccountNo());			// 환불계좌번호
+		mav.set("accountNm"		, cnclReq.getAccountNm());			// 환불계좌예금주명
+		mav.set("bankCd"		, cnclReq.getBankCd());				// 환불계좌은행코드
+		
+		mav.set("allCanYn"		, cnclReq.getAllCanYn());			// 무통장입금전 전체취소 여부
+		mav.set("isCustomer"	, cnclReq.getIsCustomer());			// 변경사유 (고객, 회사)
+		
+		// 4. 주문변경 회수지정보 추가
+		mav.set("chgerNm"		, cnclReq.getChgerNm());			// 변경자명
+		mav.set("chgerEmail"	, cnclReq.getChgerEmail());			// 변경자이메일주소
+		mav.set("chgerPhnno"	, cnclReq.getChgerPhnno());			// 변경자핸드폰번호
+		mav.set("chgerTelno"	, cnclReq.getChgerTelno());			// 변경자전화번호
+		
+		mav.set("reqGbn"		, cnclReq.getReqGbn());				// 신청구분
+						
+		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
+		//coreOrderChangeService.cnclReq(mav, userNo);
+		coreOrderChangeService.cnclComplete(mav, userNo);
+		
+		return super.ok("성공");
+	}
+	
+	/**
+	 * 취소요청승인 (관리자)
+	 * @param OrderChange - 주문취소신청정보
+	 * @return
+	 * @author jsh77b
+	 * @since 2021. 01. 20
+	 */
+	@PostMapping("/cnclReqComplete")
+	@ResponseBody
+	public GagaResponse cnclReqComplete(@RequestBody OrderChange cnclReq) {
+		
+		if (cnclReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		GagaMap mav = new GagaMap();
+		mav.set("ordNo"			, cnclReq.getOrdNo());
+		mav.set("ordChgSq"		, cnclReq.getOrdChgSq());
+		
+		// 2.취소요청철회 
+		mav = coreOrderChangeService.cnclComplete(mav, userNo);
+		
+		return super.ok("성공");
+	}
 }
 
 

+ 1607 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml

@@ -0,0 +1,1607 @@
+<?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.TsaOrderDao">
+
+	<!-- 주문목록 > 주문목록카운트 -->
+	<select id="getOrderListCount" parameterType="Order" resultType="int">
+		/* order.getOrderListCnt */
+		SELECT COUNT(1)  
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		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 TB_GOODS_IMG GI
+		ON     ODI.ITEM_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO
+		AND    P.PAY_GB = 'O'
+		AND    P.PAY_STAT = 'G016_30'
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		LEFT   OUTER JOIN (
+			SELECT OC.WD_INVOICE_NO
+			     , OC.WD_INVOICE_SEND_YN
+			     , OC.SHIP_COMP_CD
+			     , OCD.ORD_DTL_NO 
+			     , OCD.CHG_QTY
+			     , OCD.CHG_STAT
+			FROM   TB_ORDER_CHANGE OC
+			INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
+			ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ
+			WHERE  1=1 
+			GROUP  BY OCD.ORD_DTL_NO 
+		) OCD
+		ON    OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		WHERE  1=1
+		<if test='siteCd != null and siteCd != ""'>
+		AND    O.SITE_CD = #{siteCd}
+		</if>
+		<if test='mallCd != null and mallCd != ""'>
+		AND    O.MALL_GB = #{mallCd}
+		</if>
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+		<if test="multiBrand != null and multiBrand != ''">
+        AND    G1.BRAND_CD IN
+			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+        <if test="multiOrdDtlStat != null and multiOrdDtlStat != ''">
+        AND    OD.ORD_DTL_STAT IN
+			<foreach collection="multiOrdDtlStat" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+        <if test="multiOrdDtlStat == null or multiOrdDtlStat == ''">
+        	<if test="multiOrdStat != null and multiOrdStat != ''">
+        AND    OD.ORD_DTL_STAT IN
+				<foreach collection="multiOrdStat" item="item" index="index"  open="(" close=")" separator=",">
+	        		#{item}
+	            </foreach>
+            </if>
+        </if>
+		<if test="chgStat != null and chgStat != ''">
+        AND    OCD.CHG_STAT = #{chgStat}
+        </if>
+        <if test="chgStat == null or chgStat == ''">
+        	<if test="chgGb != null and chgGb != ''">
+        AND    OCD.CHG_STAT = #{chgGb}
+        	</if>
+        </if>
+        <if test='search != null and search == "searchOrdNo"'>
+        	<if test="condition != null and condition != ''">
+		AND    O.ORD_NO = #{condition}
+			</if>
+		</if>
+		<if test='search != null and search == "searchExtmallOrderId"'>
+        	<if test="condition != null and condition != ''">
+		AND    OD.EXTMALL_ORDER_ID = #{condition}
+			</if>
+		</if>
+		<if test='search != null and search == "searchAgentOrderId"'>
+        	<if test="condition != null and condition != ''">
+		AND    OD.AGENT_ORDER_ID = #{condition}
+			</if>
+		</if>
+		<if test='payMeans != null and payMeans != ""'>
+		AND    P.PAY_MEANS = #{payMeans}
+		</if>
+		<if test='orderNm != null and orderNm != ""'>
+		AND    O.ORD_NM = #{orderNm}
+		</if>
+		<if test='custId != null and custId != ""'>
+		AND    O.CUST_NO = #{custId}
+		</if>
+		<if test='orderPhnno != null and orderPhnno != ""'>
+		AND    O.ORD_PHNNO = #{orderPhnno}
+		</if>
+		<if test='goodsCd != null and goodsCd != ""'>
+		AND    G1.GOODS_CD = #{goodsCd}
+		</if>
+		<if test='sizeCd != null and sizeCd != ""'>
+		AND    ODI.OPT_CD2 = #{sizeCd}
+		</if>
+		<if test='goodsNm != null and goodsNm != ""'>
+		AND    G1.GOODS_NM = #{goodsNm}
+		</if>
+		<if test='payMeans != null and payMeans != ""'>
+		AND    P.PAY_MEANS = #{payMeans}
+		</if>
+		<if test='orderNm != null and orderNm != ""'>
+		AND    O.ORD_NM = #{orderNm}
+		</if>
+		<if test='custId != null and custId != ""'>
+		AND    O.CUST_NO = #{custId}
+		</if>
+		<if test='orderPhnno != null and orderPhnno != ""'>
+		AND    O.ORD_PHNNO = #{orderPhnno}
+		</if>
+		<if test='goodsCd != null and goodsCd != ""'>
+		AND    G2.GOODS_CD = #{goodsCd}
+		</if>
+		<if test='sizeCd != null and sizeCd != ""'>
+		AND    ODI.OPT_CD2 = #{sizeCd}
+		</if>
+		<if test='goodsNm != null and goodsNm != ""'>
+		AND    G2.GOODS_NM = #{goodsNm}
+		</if>
+		<if test='recipNm != null and recipNm != ""'>
+		AND    DA.RECIP_NM = #{recipNm}
+		</if>
+		<if test='invoiceNo != null and invoiceNo != ""'>
+		AND    OD.INVOICE_NO = #{invoiceNo}
+		</if>
+		<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "Y"'>
+		AND    OD.INVOICE_SEND_YN = 'Y'
+		</if>
+		<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "N"'>
+		AND    OD.INVOICE_SEND_YN = 'N'
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "ordDt"'>
+		AND    O.ORD_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    O.ORD_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "delvStdt"'>
+		AND    OD.DELV_STDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    OD.DELV_STDT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "soldoutDt"'>
+		AND    OD.SOLDOUT_REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    OD.SOLDOUT_REG_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+		<if test="ordNoList != null and ordNoList != ''">
+        AND    OD.ORD_NO IN
+			<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+	</select>
+
+	<!-- 주문목록 > 주문목록 -->
+	<select id="getOrderList" parameterType="Order" resultType="Order">
+		/* order.getOrderList */
+		SELECT Z.*
+		FROM (
+			SELECT @rownum := @rownum + 1 AS RNUM
+			     , A.*
+			FROM (
+				SELECT O.ORD_NO
+				     , OD.ORD_DTL_NO
+				     , ODI.ORD_DTL_ITEM_SQ
+				     , O.ORD_NM
+				     , O.CUST_NO
+				     , OD.VENDOR_ID
+				     , O.FRONT_GB
+				     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+				     , OD.ORD_EXCH_GB
+				     , OD.ORD_DTL_STAT
+				     , OD.DELV_LOC_CD
+				     , G1.GOODS_CD 
+				     , G1.GOODS_NM
+				     , G1.GOODS_TYPE
+				     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+				     , GI.SYS_IMG_NM
+				     , G2.BRAND_CD
+				     , (SELECT Z.BRAND_ENM
+				        FROM   TB_BRAND Z
+				        WHERE  Z.BRAND_CD = G2.BRAND_CD) AS BRAND_ENM
+				     , G2.GOODS_CD AS ITEM_CD
+				     , G2.GOODS_NM AS ITEM_NM
+				     , ODI.OPT_CD1
+				     , ODI.OPT_CD2
+				     , OD.EXTMALL_ORDER_ID
+				     , OD.AGENT_ORDER_ID 
+				     , ODI.ITEM_QTY * OD.ORD_QTY      AS ORD_QTY
+				     , ODI.ITEM_QTY * OD.CNCL_RTN_QTY AS CNCL_RTN_QTY
+				     , 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 AS TOT_DC_AMT
+				     , ODI.REAL_ORD_AMT
+				     , G2.SUPPLY_GOODS_CD
+				     , OD.FORMAL_GB
+				     , DATE_FORMAT(OD.DELV_ASSIGN_DT,'%Y%m%d%H%i%S') AS DELV_ASSIGN_DT 
+				     , OD.INVOICE_NO
+				     , OD.DELV_STDT
+				     , OD.SOLDOUT_YN
+				     , OD.SOLDOUT_MEMO
+				     , DATE_FORMAT(OD.SOLDOUT_REG_DT,'%Y%m%d%H%i%S') AS SOLDOUT_REG_DT 
+				     , OD.SOLDOUT_REG_NO     
+		             , CASE WHEN OD.ORD_EXCH_GB = 'O'
+			                THEN '주문'
+			                ELSE '교환'
+			                END   EXCH_GB_NM 
+				FROM   TB_ORDER O
+				INNER  JOIN TB_ORDER_DETAIL OD
+				ON     O.ORD_NO = OD.ORD_NO
+				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 TB_GOODS_IMG GI
+				ON     ODI.ITEM_CD = GI.GOODS_CD
+				AND    ODI.OPT_CD1 = GI.COLOR_CD
+				INNER  JOIN TB_PAYMENT P
+				ON     O.ORD_NO = P.ORD_NO
+				AND    P.PAY_GB = 'O'
+				AND    P.PAY_STAT = 'G016_30'
+				INNER  JOIN TB_DELIVERY_ADDR DA
+				ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+				LEFT   OUTER JOIN (
+					SELECT OC.WD_INVOICE_NO
+					     , OC.WD_INVOICE_SEND_YN
+					     , OC.SHIP_COMP_CD
+					     , OCD.ORD_DTL_NO 
+					     , OCD.CHG_QTY
+					     , OCD.CHG_STAT
+					FROM   TB_ORDER_CHANGE OC
+					INNER  JOIN TB_ORDER_CHANGE_DETAIL OCD
+					ON     OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+					WHERE  1=1
+					GROUP  BY OCD.ORD_DTL_NO 
+				) OCD
+				ON    OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+				WHERE  1=1
+				<if test='siteCd != null and siteCd != ""'>
+				AND    O.SITE_CD = #{siteCd}
+				</if>
+				<if test='mallCd != null and mallCd != ""'>
+				AND    O.MALL_GB = #{mallCd}
+				</if>
+				<if test='supplyCompCd != null and supplyCompCd != ""'>
+				AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+				</if>
+				<if test="multiBrand != null and multiBrand != ''">
+		        AND    G1.BRAND_CD IN
+					<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+		        		#{item}
+		            </foreach>
+		        </if>
+		        <if test="multiOrdDtlStat != null and multiOrdDtlStat != ''">
+		        AND    OD.ORD_DTL_STAT IN
+					<foreach collection="multiOrdDtlStat" item="item" index="index"  open="(" close=")" separator=",">
+		        		#{item}
+		            </foreach>
+		        </if>
+		        <if test="multiOrdDtlStat == null or multiOrdDtlStat == ''">
+		        	<if test="multiOrdStat != null and multiOrdStat != ''">
+		        AND    OD.ORD_DTL_STAT IN
+						<foreach collection="multiOrdStat" item="item" index="index"  open="(" close=")" separator=",">
+			        		#{item}
+			            </foreach>
+		            </if>
+		        </if>
+				<if test="chgStat != null and chgStat != ''">
+		        AND    OCD.CHG_STAT = #{chgStat}
+		        </if>
+		        <if test="chgStat == null or chgStat == ''">
+		        	<if test="chgGb != null and chgGb != ''">
+		        AND    OCD.CHG_STAT = #{chgGb}
+		        	</if>
+		        </if>
+		        <if test='search != null and search == "searchOrdNo"'>
+		        	<if test="condition != null and condition != ''">
+				AND    O.ORD_NO = #{condition}
+					</if>
+				</if>
+				<if test='search != null and search == "searchExtmallOrderId"'>
+		        	<if test="condition != null and condition != ''">
+				AND    OD.EXTMALL_ORDER_ID = #{condition}
+					</if>
+				</if>
+				<if test='search != null and search == "searchAgentOrderId"'>
+		        	<if test="condition != null and condition != ''">
+				AND    OD.AGENT_ORDER_ID = #{condition}
+					</if>
+				</if>
+				<if test='payMeans != null and payMeans != ""'>
+				AND    P.PAY_MEANS = #{payMeans}
+				</if>
+				<if test='orderNm != null and orderNm != ""'>
+				AND    O.ORD_NM = #{orderNm}
+				</if>
+				<if test='custId != null and custId != ""'>
+				AND    O.CUST_NO = #{custId}
+				</if>
+				<if test='orderPhnno != null and orderPhnno != ""'>
+				AND    O.ORD_PHNNO = #{orderPhnno}
+				</if>
+				<if test='goodsCd != null and goodsCd != ""'>
+				AND    G1.GOODS_CD = #{goodsCd}
+				</if>
+				<if test='sizeCd != null and sizeCd != ""'>
+				AND    ODI.OPT_CD2 = #{sizeCd}
+				</if>
+				<if test='goodsNm != null and goodsNm != ""'>
+				AND    G1.GOODS_NM = #{goodsNm}
+				</if>
+				<if test='payMeans != null and payMeans != ""'>
+				AND    P.PAY_MEANS = #{payMeans}
+				</if>
+				<if test='orderNm != null and orderNm != ""'>
+				AND    O.ORD_NM = #{orderNm}
+				</if>
+				<if test='custId != null and custId != ""'>
+				AND    O.CUST_NO = #{custId}
+				</if>
+				<if test='orderPhnno != null and orderPhnno != ""'>
+				AND    O.ORD_PHNNO = #{orderPhnno}
+				</if>
+				<if test='goodsCd != null and goodsCd != ""'>
+				AND    G2.GOODS_CD = #{goodsCd}
+				</if>
+				<if test='sizeCd != null and sizeCd != ""'>
+				AND    ODI.OPT_CD2 = #{sizeCd}
+				</if>
+				<if test='goodsNm != null and goodsNm != ""'>
+				AND    G2.GOODS_NM = #{goodsNm}
+				</if>
+				<if test='recipNm != null and recipNm != ""'>
+				AND    DA.RECIP_NM = #{recipNm}
+				</if>
+				<if test='invoiceNo != null and invoiceNo != ""'>
+				AND    OD.INVOICE_NO = #{invoiceNo}
+				</if>
+				<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "Y"'>
+				AND    OD.INVOICE_SEND_YN = 'Y'
+				</if>
+				<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "N"'>
+				AND    OD.INVOICE_SEND_YN = 'N'
+				</if>
+				<if test='searchDateGb != null and searchDateGb == "ordDt"'>
+				AND    O.ORD_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+				AND    O.ORD_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+				</if>
+				<if test='searchDateGb != null and searchDateGb == "delvStdt"'>
+				AND    OD.DELV_STDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+				AND    OD.DELV_STDT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+				</if>
+				<if test='searchDateGb != null and searchDateGb == "soldoutDt"'>
+				AND    OD.SOLDOUT_REG_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+				AND    OD.SOLDOUT_REG_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+				</if>
+				<if test="ordNoList != null and ordNoList != ''">
+		        AND    OD.ORD_NO IN
+					<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+		        		#{item}
+		            </foreach>
+		        </if>
+		        ORDER  BY OD.ORD_NO DESC
+		             , OD.ORD_DTL_NO DESC
+		             , ODI.ORD_DTL_ITEM_SQ DESC
+	        ) A
+			JOIN (SELECT @rownum := 0) R
+		) Z
+		WHERE  1=1
+        AND    Z.RNUM BETWEEN  #{pageable.startRow} AND #{pageable.endRow}
+        ORDER  BY Z.ORD_NO DESC
+             , Z.ORD_DTL_NO DESC
+             , Z.ORD_DTL_ITEM_SQ DESC
+	</select>
+	
+	<!-- 주문상세 > 주문기본정보 -->
+	<select id="getOrderInfoList" parameterType="Order" resultType="Order">
+		/* order.getOrderInfoList */
+		SELECT O.SITE_CD
+		     , FN_GET_CODE_NM('G000', O.SITE_CD) AS SITE_CD_NM
+		     , O.MALL_GB
+		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
+		     , O.FRONT_GB
+		     , CASE WHEN O.FRONT_GB = 'P'
+		            THEN 'PC'
+		            ELSE 'MOBILE'
+		             END FRONT_GB_NM
+		     , OD.EXTMALL_ID
+		     , (SELECT X.EXTMALL_NM
+		        FROM   TB_EXTMALL X
+		        WHERE  X.EXTMALL_ID = OD.EXTMALL_ID) AS EXTMALL_NM 
+		     , O.ORD_DT
+		     , O.ORD_NM
+		     , O.CUST_NO
+		     , O.ORD_NO
+		     , O.ORD_EMAIL
+		     , O.ORD_PHNNO
+		     , O.ORD_TELNO
+		     , C.CUST_GB 
+		     , CASE WHEN C.CUST_GB IS NULL 
+		            THEN '비회원'
+		            ELSE FN_GET_CODE_NM('G100', C.CUST_GB) 
+		             END CUST_GB_NM
+		     , C.MANAGED_RSN
+		     , CASE WHEN C.MANAGED_RSN IS NULL 
+		            THEN '부'
+		            ELSE FN_GET_CODE_NM('G120', C.MANAGED_RSN) 
+		             END MANAGED_RSN_NM
+		     , C.CUST_GRADE
+		     , CASE WHEN C.CUST_GRADE IS NULL 
+		            THEN '등급없음'
+		            ELSE FN_GET_CODE_NM('G110', C.CUST_GRADE) 
+		             END CUST_GRADE_NM
+			 , P.ESCROW_YN
+		     , P.PAY_MEANS
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , P.CARD_NM
+		     , P.VA_BANK
+		     , CASE WHEN P.PAY_MEANS = 'G014_20' || P.PAY_MEANS = 'G014_10'
+		            THEN FN_GET_CODE_NM('G940', P.VA_BANK)
+		            ELSE P.CARD_NM
+		            END  CARD_NM
+		     , P.PG_TRADE_NO
+		     , DATE_FORMAT(P.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT
+		     , P.PAY_STAT
+		     , FN_GET_CODE_NM('G016', P.PAY_STAT) AS PAY_STAT_NM
+		     , P.PAY_AMT
+		     , DATE_FORMAT(P.VA_DEADLINE,'%Y%m%d%H%i%S') AS VA_DEADLINE
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		LEFT   OUTER JOIN TB_CUSTOMER C
+		ON     O.CUST_NO = C.CUST_NO
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO
+		AND    P.PAY_GB = 'O'
+		AND    P.PAY_STAT = 'G016_30'
+		WHERE  1=1
+		AND    O.ORD_NO = #{ordNo}
+		LIMIT  1
+	</select>
+	
+	<!-- 주문상세 > 주문상품상세 목록(단품) -->
+	<select id="getOrderDetailList" parameterType="Order" resultType="Order">
+		/* order.getOrderDetailList */
+		SELECT OD.ORD_NO
+		     , CASE WHEN OD.ORD_EXCH_GB = 'O'
+			        THEN '주문'
+			        ELSE '교환'
+			        END   EXCH_GB_NM 
+		     , OD.ORD_DTL_NO
+		     , G1.GOODS_CD 
+		     , G1.GOODS_NM
+		     , G1.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , GI.SYS_IMG_NM
+		     , G2.BRAND_CD
+		     , (SELECT Z.BRAND_ENM
+		        FROM   TB_BRAND Z
+		        WHERE  Z.BRAND_CD = G2.BRAND_CD) AS BRAND_ENM
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ITEM_QTY
+		     , ODI.ITEM_PRICE
+		     , ODI.ITEM_QTY * OD.ORD_QTY      AS ORD_QTY
+		     , ODI.ITEM_QTY * OD.CNCL_RTN_QTY AS 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.OPT_ADD_PRICE
+		     , ODI.CPN1_DC_AMT
+		     , ODI.GOODS_CPN_DC_AMT
+		     , ODI.CART_CPN_DC_AMT
+		     , ODI.TMTB1_DC_AMT
+		     , ODI.TMTB2_DC_AMT
+		     , ODI.PNT_DC_AMT
+		     , ODI.PRE_PNT_DC_AMT
+		     , ODI.SAVE_PNT_AMT
+		     , ODI.GFCD_USE_AMT
+			 , ODI.ORD_AMT
+		     , ODI.REAL_ORD_AMT
+		     , ODI.CNCL_RTN_AMT
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM 
+		     , OD.SOLDOUT_YN
+		     , OD.SOLDOUT_REG_NO
+		     , OD.SOLDOUT_MEMO
+		     , OD.INVOICE_NO
+		     , OD.DELV_LOC_CD 
+		     , X.G20
+		     , X.G30
+		     , X.G40
+		     , X.G50
+		     , X.G55
+		     , X.G60
+		     , OD.DELV_ADDR_SQ
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		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 TB_GOODS_IMG GI
+		ON     ODI.ITEM_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO
+		AND    P.PAY_GB = 'O'
+		AND    P.PAY_STAT = 'G016_30'
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		LEFT   OUTER JOIN (
+			SELECT MAX(Z.G013_20) AS G20
+			     , MAX(Z.G013_30) AS G30
+			     , MAX(Z.G013_40) AS G40
+			     , MAX(Z.G013_50) AS G50
+			     , MAX(Z.G013_55) AS G55
+			     , MAX(Z.G013_60) AS G60
+			     , Z.ORD_NO
+			     , Z.ORD_DTL_NO
+			FROM (
+				SELECT CASE WHEN ODH.ORD_DTL_STAT = 'G013_20' THEN 'G013_20' END G013_20
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_30' THEN 'G013_30' END G013_30
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_40' THEN 'G013_40' END G013_40
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_50' THEN 'G013_50' END G013_50
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_55' THEN 'G013_55' END G013_55
+				     , CASE WHEN ODH.ORD_DTL_STAT = 'G013_60' THEN 'G013_60' END G013_60
+				     , ODH.ORD_NO
+				     , ODH.ORD_DTL_NO
+				FROM   TB_ORDER_DETAIL_HST ODH
+				INNER  JOIN TB_COMMON_CODE CC
+				ON     ODH.ORD_DTL_STAT = CC.CD
+				WHERE  ODH.ORD_NO = #{ordNo}
+				GROUP  BY ODH.ORD_DTL_STAT
+			) Z
+		) X
+		ON     OD.ORD_DTL_NO = X.ORD_DTL_NO
+		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
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+	</select>
+	
+	<!-- 주문상세 > 사은품목록 -->
+	<select id="getOrderFreeGiftList" parameterType="Order" resultType="Order">
+		/* order.getOrderFreeGiftList */
+		SELECT OFV.ORD_FREEGIFT_SQ
+		     , OFV.ORD_NO
+		     , OFV.FREEGIFT_SQ 
+		     , FG.FREEGIFT_NM 
+		     , OFV.FREEGIFT_VAL_SQ 
+		     , OFV.USE_POINT
+		     , OFV.ITEM_CD 
+		     , G.GOODS_NM AS ITEM_NM
+		     , OFV.ITEM_QTY 
+		     , OFV.OPT_CD 
+		     , OFV.OPT_CD1 
+		     , OFV.OPT_CD2 
+		     , OFV.DEL_YN
+		FROM   TB_ORD_FREEGIFT_VAL OFV
+		INNER  JOIN TB_FREEGIFT FG
+		ON     OFV.FREEGIFT_SQ = FG.FREEGIFT_SQ
+		INNER  JOIN TB_GOODS G
+		ON     OFV.ITEM_CD = G.GOODS_CD 
+		WHERE 1=1
+		AND    OFV.ORD_NO = #{ordNo}
+		AND    OFV.DEL_YN = 'N'
+		ORDER  BY OFV.REG_DT DESC
+	</select>
+	
+	<!-- 주문상세 > 배송정보 -->
+	<select id="getDeliveryAddrList" parameterType="Order" resultType="Order">
+		/* order.getDeliveryAddrList */
+		SELECT Z.DELV_ADDR_SQ
+		     , SUM(Z.DELV_ADDR_EDIT_YN) AS DELV_ADDR_EDIT_YN
+		     , Z.EXCH_GB_NM
+		     , Z.RECIP_NM
+		     , Z.RECIP_PHNNO
+		     , Z.RECIP_TELNO
+		     , Z.RECIP_ZIPCODE
+		     , Z.RECIP_BASE_ADDR
+		     , Z.RECIP_DTL_ADDR
+		     , Z.ORD_EMAIL
+		     , Z.DELV_MEMO
+		FROM   (
+			SELECT OD.DELV_ADDR_SQ
+			     , CASE WHEN ORD_DTL_STAT IN ('G013_10', 'G013_20', 'G013_30', 'G013_40')
+			            THEN 0
+			            ELSE 1
+			            END DELV_ADDR_EDIT_YN
+			     , OD.ORD_EXCH_GB
+			     , CASE WHEN OD.ORD_EXCH_GB = 'O'
+			            THEN '주문'
+			            ELSE '교환'
+			            END   EXCH_GB_NM 
+			     , DA.RECIP_NM 
+			     , DA.RECIP_PHNNO 
+			     , DA.RECIP_TELNO 
+			     , DA.RECIP_ZIPCODE 
+			     , DA.RECIP_BASE_ADDR
+			     , DA.RECIP_DTL_ADDR
+			     , O.ORD_EMAIL
+			     , DA.DELV_MEMO
+			FROM   TB_ORDER_DETAIL OD
+			INNER  JOIN TB_ORDER O
+			ON     OD.ORD_NO = O.ORD_NO
+			INNER  JOIN TB_DELIVERY_ADDR DA
+			ON     OD.DELV_ADDR_SQ  = DA.DELV_ADDR_SQ
+			WHERE  1=1
+			AND    OD.ORD_NO = #{ordNo}
+		) Z
+		ORDER  BY Z.DELV_ADDR_SQ
+	</select>
+	
+	<!-- 주문상세 > 결제정보 -->
+	<select id="getOrderPaymentBasicInfoList" parameterType="Order" resultType="Order">
+		/* order.getOrderPaymentBasicInfoList */
+		SELECT P.ESCROW_YN
+		     , P.PAY_MEANS
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , P.CARD_NM 
+		     , P.VA_BANK
+		     , CASE WHEN P.PAY_MEANS = 'G014_20' || P.PAY_MEANS = 'G014_10'
+		            THEN FN_GET_CODE_NM('G940', P.VA_BANK)
+		            ELSE P.CARD_NM
+		            END  CARD_NM
+		     , P.PG_TRADE_NO
+		     , DATE_FORMAT(P.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT  
+		     , P.PAY_STAT 
+		     , FN_GET_CODE_NM('G016', P.PAY_STAT) AS PAY_STAT_NM
+		     , P.PAY_AMT 
+		     , DATE_FORMAT(P.VA_DEADLINE,'%Y%m%d%H%i%S') AS VA_DEADLINE 
+		FROM   TB_PAYMENT P
+		WHERE  1=1
+		AND    P.ORD_NO = #{ordNo}
+		AND    P.PAY_STAT = 'G016_30'
+		ORDER  BY P.REG_DT DESC
+	</select>
+	
+	<!-- 주문상세 > 배송비정보 -->
+	<select id="getDeliveryFeeList" parameterType="Order" resultType="Order">
+		/* order.getDeliveryFeeList */
+		SELECT Z.*
+		FROM   (
+			SELECT DF.DELV_FEE_GB
+			     , FN_GET_CODE_NM('G018', DF.DELV_FEE_GB) AS DELV_FEE_GB_NM
+			     , DF.DELV_FEE
+			     , DF.DELV_USAC_YN
+			     , DATE_FORMAT(DF.DELV_USAC_DT,'%Y%m%d%H%i%S') AS DELV_USAC_DT
+			     , DF.SUPPLY_COMP_CD
+			     , DF.DELV_FEE_SQ
+			FROM   TB_DELIVERY_FEE DF
+			WHERE  1=1
+			AND    DF.ORD_NO = #{ordNo}
+		) Z
+		GROUP  BY Z.DELV_FEE_GB 
+		     , Z.DELV_FEE_GB_NM
+		     , Z.DELV_FEE
+		     , Z.DELV_USAC_YN 
+		     , Z.DELV_USAC_DT 
+		     , Z.SUPPLY_COMP_CD 
+		     , Z.DELV_FEE_SQ
+	</select>
+	
+	<!-- 주문상세 > 취소/반품/교환 요청정보 (변경상세단위) -->
+	<select id="getOrderChangeList" parameterType="Order" resultType="Order">
+		/* order.getOrderChangeList */
+		SELECT OCD.ORD_CHG_SQ
+		     , 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>
+	
+	<!-- 주문상세 > 환불정보 -->
+	<select id="getOrderRefundInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderRefundInfo */
+		SELECT P.PAY_MEANS
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , P.CARD_NM
+		     , R.RA_BANK
+		     , CASE WHEN PAY_MEANS = 'G014_20' || PAY_MEANS = 'G014_10'
+		            THEN FN_GET_CODE_NM('G940', R.RA_BANK)
+		            ELSE P.CARD_NM
+		            END  CARD_NM
+		     , R.RA_NO
+		     , R.RA_NM 
+		     , R.REFUND_AMT 
+		     , DATE_FORMAT(P.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = P.UPD_NO) AS UPD_NM
+		FROM   TB_REFUND R
+		INNER  JOIN TB_PAYMENT P
+		ON     R.ORD_CHG_SQ = P.ORD_CHG_SQ 
+		WHERE  1=1
+		AND    R.ORD_NO = #{ordNo}
+		ORDER  BY R.REG_DT DESC
+	</select>
+	
+	<!-- 주문상세 > 상담내역 -->
+	<select id="getOrderCounselInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderCounselInfo */
+		SELECT CS.COUNSEL_CLSF
+			 , FN_GET_CODE_NM('G059', CS.COUNSEL_CLSF) AS COUNSEL_CLSF_NM
+		     , CS.REL_GOODS_CD
+		     , CS.QUEST_TITLE
+		     , DATE_FORMAT(CS.QUEST_DT,'%Y%m%d%H%i%S') AS QUEST_DT
+		     , DATE_FORMAT(CS.ANS_DT,'%Y%m%d%H%i%S') AS ANS_DT
+		     , CS.ANS_NO
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = CS.ANS_NO) AS ANS_NM
+		     , CS.DEL_YN
+		FROM   TB_COUNSEL CS
+		WHERE  1=1
+		AND    CS.REL_ORD_NO = #{ordNo}
+		ORDER  BY CS.REG_DT DESC
+	</select>
+	
+	<!-- 주문상세 > 관리자메모 -->
+	<select id="getOrderMemoList" parameterType="Order" resultType="Order">
+		/* order.getOrderTsainMemoList */
+		SELECT ORDER_MEMO_SQ 
+		     , OM.ORD_NO
+		     , OM.MEMO
+		     , OM.REG_NO
+		     , OM.REG_DT
+		     , OM.UPD_NO
+		     , OM.UPD_DT
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = OM.REG_NO) AS REG_NM
+		FROM  TB_ORDER_MEMO OM
+		WHERE 1=1
+		AND   OM.ORD_NO = #{ordNo}
+		AND   OM.DEL_YN = #{delYn}
+		ORDER BY OM.REG_DT DESC
+	</select>
+	
+	<!-- 주문/배송 > 입점업체미발주목록 -->
+	<select id="getOrderSellerUnorderList" parameterType="Order" resultType="Order">
+		/* order.getOrderSellerUnorderList */
+		SELECT OD.SUPPLY_COMP_CD
+		     , (SELECT SC.SUPPLY_COMP_NM
+		        FROM   TB_SUPPLY_COMPANY SC
+		        WHERE  SC.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
+		     , G1.BRAND_CD 
+		     , (SELECT B.BRAND_KNM 
+		        FROM   TB_BRAND B
+		        WHERE  B.BRAND_CD = G1.BRAND_CD) AS BRAND_KNM
+		     , G1.GOODS_TYPE 
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , G1.GOODS_CD
+		     , G1.GOODS_NM
+		     , 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
+		     , O.ORD_NM 
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , P.PAY_MEANS 
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , O.ORD_PHNNO 
+		     , DA.RECIP_NM 
+		     , DA.RECIP_PHNNO 
+		     , DA.RECIP_ZIPCODE 
+		     , DA.RECIP_BASE_ADDR 
+		     , DA.RECIP_DTL_ADDR 
+		     , G2.SUPPLY_GOODS_CD
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ORD_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 AS TOT_DC_AMT
+		     , ODI.REAL_ORD_AMT 
+		     , OD.INVOICE_NO 
+		     , OD.SHIP_COMP_CD
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		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 TB_GOODS_IMG GI
+		ON     ODI.ITEM_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO 
+		AND    P.PAY_GB = 'O'
+		AND    P.PAY_STAT = 'G016_30'
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ 
+		INNER  JOIN TB_DELIVERY_FEE DF		
+		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
+		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
+		AND    DF.ORD_NO = OD.ORD_NO
+		WHERE  1=1
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+		<if test="multiBrand != null and multiBrand != ''">
+        AND    G.BRAND_CD IN
+			<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+        		#{item}
+            </foreach>
+        </if>
+        <if test="ordDtlStat != null and ordDtlStat != ''">
+        AND    OD.ORD_DTL_STAT = #{ordDtlStat}
+        </if>
+        <if test="ordNo != null and ordNo != ''">
+		AND    O.ORD_NO = #{ordNo}
+		</if>
+		<if test="ordNm != null and ordNm != ''">
+		AND    O.ORD_NM = #{ordNm}
+		</if>
+		<if test='goodsCd != null and goodsCd != ""'>
+		AND    G.GOODS_CD = #{goodsCd}
+		</if>
+		<if test='searchDateGb != null and searchDateGb == "ordDt"'>
+		AND    O.ORD_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND    O.ORD_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		</if>
+	</select>
+	
+	<!-- 주문/배송 > 입점업체 엑셀다운용 임시테이블 삭제-->
+	<delete id="deleteEntryExcelDownTmp" parameterType="Order">
+		/* TsbOrder.deleteEntryExcelDownTmp */
+		DELETE FROM TB_ENTRY_UPLOAD_EXCEL
+		WHERE  1=1
+	</delete>
+	
+	<!-- 주문/배송 > 입점업체 주문상세정보 변경 (입점) -->
+	<update id="updateOrderDetailStat" parameterType="Order">
+		/* Order.updateOrderDetailStat */
+		UPDATE TB_ORDER_DETAIL
+		SET    ORD_DTL_STAT = 'G013_30'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP()
+		WHERE  ORD_DTL_NO = #{ordDtlNo}
+		AND    ORD_DTL_STAT in ('G013_20')
+		AND    SUPPLY_COMP_CD = #{supplyCompCd}
+	</update>
+	
+	<!-- 주문/배송 > 주문상세이력 생성-->
+	<insert id="createOrderDetailHst" parameterType="Order">
+		/* Order.createOrderDetailHst */
+		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 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
+				, #{regNo} AS REG_ID
+				, CURRENT_TIMESTAMP() AS REG_DT
+				, #{regNo} AS REG_ID
+				, CURRENT_TIMESTAMP() AS UPD_DT
+		FROM   TB_ORDER_DETAIL
+		WHERE  ORD_DTL_NO = #{ordDtlNo}
+	</insert>
+	
+	<!-- 주문/배송 > 입점업체 엑셀다운 임시파일 체크-->
+	<select id="getEntryUploadExcelCheck" parameterType="Order" resultType="int">
+		SELECT COUNT(1)
+		FROM   TB_ENTRY_UPLOAD_EXCEL X
+		WHERE  1=1
+		AND    X.ORD_NO = #{ordNo}
+		AND    X.ORD_DTL_NO = #{ordDtlNo}
+	</select>
+	
+	<!-- 주문/배송 > 입점업체 엑셀다운용 임시테이블 생성-->
+	<insert id="createEntryExcelDownTmp" parameterType="Order">
+		INSERT INTO TB_ENTRY_UPLOAD_EXCEL (
+			ORD_NO
+			, ORD_DTL_NO
+			, REG_NO
+			, REG_DT
+		) VALUES (
+			#{ordNo}
+			, #{ordDtlNo}
+			, #{regNo}
+			, CURRENT_TIMESTAMP()
+		)
+	</insert>
+	
+	<!-- 주문/배송 > 입점업체미발주목록 > 엑셀다운로드 -->
+	<select id="getSellerUnorderList" parameterType="Order" resultType="Order">
+		/* Order.getSellerUnorderList */
+		SELECT (SELECT SC.SUPPLY_COMP_NM
+		        FROM   TB_SUPPLY_COMPANY SC
+		        WHERE  SC.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD) AS SUPPLY_COMP_NM
+		     , (SELECT B.BRAND_KNM 
+		        FROM   TB_BRAND B
+		        WHERE  B.BRAND_CD = G1.BRAND_CD) AS BRAND_KNM
+	         , G1.GOODS_CD 
+		     , G1.GOODS_NM
+			 , G1.GOODS_TYPE
+		     , FN_GET_CODE_NM('G056', G1.GOODS_TYPE) AS GOODS_TYPE_NM
+		     , OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT) AS ORD_DTL_STAT_NM
+		     , O.ORD_NM 
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , FN_GET_CODE_NM('G014', P.PAY_MEANS) AS PAY_MEANS_NM
+		     , O.ORD_PHNNO 
+		     , DA.RECIP_NM 
+		     , DA.RECIP_PHNNO 
+		     , DA.RECIP_ZIPCODE 
+		     , DA.RECIP_BASE_ADDR 
+		     , DA.RECIP_DTL_ADDR 
+		     , G2.SUPPLY_GOODS_CD
+		     , G2.GOODS_CD AS ITEM_CD
+		     , G2.GOODS_NM AS ITEM_NM 
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2
+		     , ODI.ORD_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 AS TOT_DC_AMT
+		     , ODI.REAL_ORD_AMT 
+		     , OD.INVOICE_NO 
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		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 TB_GOODS_IMG GI
+		ON     ODI.ITEM_CD = GI.GOODS_CD
+		AND    ODI.OPT_CD1 = GI.COLOR_CD 
+		INNER  JOIN TB_PAYMENT P
+		ON     O.ORD_NO = P.ORD_NO 
+		AND    P.PAY_GB = 'O' 
+		INNER  JOIN TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		INNER  JOIN TB_DELIVERY_FEE DF		
+		ON     DF.SUPPLY_COMP_CD = OD.SUPPLY_COMP_CD
+		AND    DF.DELV_FEE_CD = OD.DELV_FEE_CD 
+		AND    DF.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ENTRY_UPLOAD_EXCEL X
+		ON     OD.ORD_NO = X.ORD_NO
+		AND    OD.ORD_DTL_NO = X.ORD_DTL_NO
+		WHERE  1=1
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		</if>
+	</select>
+	
+	<!-- 주문/배송 > 입점업체미발주목록 > 주문상세 목록 -->
+	<select id="getOrderDetailInfo" parameterType="Order" resultType="Order">
+		/* TsaOrder.getOrderDetailInfo */
+		SELECT O.ORD_NO
+		     , O.MALL_GB
+		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , DATE_FORMAT(O.PAY_DT,'%Y%m%d%H%i%S') AS PAY_DT
+		     , O.CUST_NO
+		     , O.ORD_NM
+		     , O.ORD_PHNNO
+		     , O.ORD_TELNO
+		     , O.ORD_EMAIL
+		     , OD.ORD_DTL_STAT
+		     , O.SITE_CD
+		     , O.FRONT_GB
+		     , OD.ORD_DTL_NO
+		     , OD.ORD_EXCH_GB
+		     , OD.ORG_ORD_DTL_NO
+		     , OD.VENDOR_ID
+		     , OD.SUPPLY_COMP_CD
+		     , OD.GOODS_CD
+		     , OD.FORMAL_GB
+		     , OD.GOODS_TYPE
+		     , OD.LIST_PRICE
+		     , OD.CURR_PRICE
+		     , OD.DC_RATE
+		     , OD.ORD_QTY
+		     , OD.ORD_AMT
+		     , OD.CNCL_RTN_QTY
+		     , OD.CNCL_RTN_AMT
+		     , OD.GOODS_CPN_DC_AMT
+		     , OD.CART_CPN_DC_AMT
+		     , OD.PNT_DC_AMT
+		     , OD.PRE_PNT_DC_AMT
+		     , OD.SAVE_PNT_AMT
+		     , OD.REAL_ORD_AMT
+		     , OD.AGENT_ORDER_ID
+		     , OD.EXTMALL_ORDER_ID
+		     , OD.ORD_DTL_STAT
+		     , FN_GET_CODE_NM('G013', OD.ORD_DTL_STAT)    AS ORD_DTL_STAT_NM
+		     , OD.SOLDOUT_YN
+		     , OD.SOLDOUT_MEMO
+		     , OD.SOLDOUT_REG_NO
+		     , OD.SOLDOUT_REG_DT
+		     , OD.SHIP_COMP_CD
+		     , OD.INVOICE_NO
+		     , OD.DELV_STDT
+		     , OD.DELV_EDDT
+		     , OD.SELL_STORE_CD
+		     , OD.SELL_FEE_RATE
+		     , OD.DELV_ADDR_SQ
+		     , OD.REG_NO
+		     , OD.REG_DT
+		     , OD.UPD_NO
+		     , OD.UPD_DT
+		     , (SELECT SELF_GOODS_YN FROM TB_GOODS WHERE GOODS_CD = OD.GOODS_CD) AS SELF_YN
+		     , ODI.ITEM_CD
+		     , ODI.OPT_CD1
+		     , ODI.OPT_CD2 
+		FROM   TB_ORDER O
+		INNER  JOIN TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER  JOIN TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		WHERE  O.ORD_NO = OD.ORD_NO
+		AND    OD.ORD_DTL_NO = #{ordDtlNo}
+		AND    ODI.ITEM_CD = #{itemCd}
+		AND    ODI.OPT_CD2 = #{optCd2}
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+	</select>
+	
+	<!-- 주문/배송 > 주문상세정보 변경 - 송장번호 적용(입점)  -->
+	<update id="updateOrderDetailInvoice" parameterType="Order">
+		/* TsaOrder.updateOrderDetailInvoice */
+		UPDATE TB_ORDER_DETAIL
+		SET    ORD_DTL_STAT = 'G013_55'
+		     , INVOICE_NO = REPLACE(#{invoiceNo},'-','')
+		     , INVOICE_SEND_YN = 'Y'
+		     , SHIP_COMP_CD = #{shipCompCd}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP()
+		WHERE  ORD_DTL_NO = #{ordDtlNo}
+		AND    ORD_DTL_STAT IN ('G013_30', 'G013_55')
+		AND    SUPPLY_COMP_CD = #{supplyCompCd}
+	</update>
+	
+	<!-- 주문상세 > 주문메오 > 주문메모정보조회 -->
+	<select id="getOrderMemoInfo" parameterType="Order" resultType="Order">
+		/* order.getOrderMemoInfo */
+		SELECT ORDER_MEMO_SQ
+		     , OM.ORD_NO
+		     , OM.MEMO
+		     , OM.REG_NO
+		     , OM.REG_DT
+		     , OM.UPD_NO
+		     , OM.UPD_DT
+		     , (SELECT USER_NM
+		        FROM   TB_USER X
+		        WHERE  X.USER_NO = OM.UPD_NO) AS USER_NM
+		FROM  TB_ORDER_MEMO OM
+		WHERE 1=1
+		AND   OM.ORD_NO = #{ordNo}
+		AND   OM.DEL_YN = 'N'
+	</select>
+	
+	<!-- 주문상세 > 주문요청 관리자 메모 > 메모등록 -->
+	<insert id="createOrderMemo" parameterType="Order">
+		/* order.createOrderMemo */
+		INSERT INTO TB_ORDER_MEMO (
+			ORD_NO
+			,MEMO
+			,ORG_FILE_NM
+			,SYS_FILE_NM
+			,DEL_YN
+			,REG_NO
+			,REG_DT
+			,UPD_NO
+			,UPD_DT
+		) VALUES (
+			#{ordNo}
+			,#{memo}
+			,#{orgFileNm}
+			,#{sysFileNm}
+			,'N'
+			,#{regNo}
+			,CURRENT_TIMESTAMP()
+			,#{updNo}
+			,CURRENT_TIMESTAMP()
+		)
+	</insert>
+	
+	<!-- 주문상세 > 주문요청 관리자 메모 > 메모수정 -->
+	<update id="updateOrderMemo" parameterType="Order">
+		/* order.updateOrderMemo */
+		UPDATE TB_ORDER_MEMO
+		SET    MEMO = #{memo}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP() 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    ORDER_MEMO_SQ = #{seq}
+	</update>
+	
+	<!-- 주문상세 > 주문요청 관리자 메모 > 메모수정 -->
+	<update id="deleteOrderMemo" parameterType="Order">
+		/* order.deleteOrderMemo */
+		UPDATE TB_ORDER_MEMO
+		SET    DEL_YN = 'Y'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP() 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    ORDER_MEMO_SQ = #{seq}
+	</update>
+	
+	<!-- 주문상세 > 주문상품 상세 변경 이력 -->
+	<select id="getOrderDetailHistoryList" parameterType="Order" resultType="Order">
+		/* order.getOrderDetailHistoryList */
+		SELECT DATE_FORMAT(ODH.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
+		     , (SELECT Z.USER_ID
+		        FROM   TB_USER Z
+		        WHERE  Z.USER_NO = ODH.UPD_NO) 				AS UPD_ID
+		     , CASE WHEN SUBSTR(ORD_DTL_STAT, 1, 4) = 'G013'
+		            THEN FN_GET_CODE_NM('G013', ODH.ORD_DTL_STAT)
+		            ELSE FN_GET_CODE_NM('G685', ODH.ORD_DTL_STAT)
+		            END  ORD_DTL_STAT_NM
+		     , ODH.ORD_QTY
+		     , ODH.CNCL_RTN_QTY 
+		     , ODH.DELV_LOC_CD 
+		     , ODH.INVOICE_NO 
+		     , ODH.SHIP_COMP_CD
+		     , (SELECT SHIP_COMP_NM
+		        FROM   TB_SHIP_COMPANY Z
+		        WHERE  Z.SHIP_COMP_CD = ODH.SHIP_COMP_CD) 	AS SHIP_COMP_NM
+		FROM   TB_ORDER_DETAIL_HST ODH 
+		WHERE  1=1
+		AND    ODH.ORD_DTL_NO = #{ordDtlNo}
+		ORDER  BY ODH.REG_DT DESC
+	</select>
+	
+	<!-- 주문상세 > 쿠폰사용내역 팝업 화면 -->
+	<select id="getOrderDiscountCouponList" parameterType="Order" resultType="Order">
+		/* order.getOrderDiscountCouponList */
+		WITH COUPON_DATA AS (
+			SELECT OD.ORD_NO
+			     , OD.ORD_DTL_NO
+			     , OD.GOODS_CD
+			     , OD.ORD_AMT
+			     , OD.SUPPLY_COMP_CD
+			     , OD.DELV_FEE_CD
+			     , DF.DELV_FEE 
+			     , OD.GOODS_CPN_SQ 
+			     , OD.GOODS_CPN_DC_AMT 
+			     , OD.CART_CPN_SQ
+			     , OD.CART_CPN_DC_AMT
+			     , DF.DELV_CPN_SQ
+			     , DF.DELV_CPN_DC_AMT
+			FROM   TB_ORDER_DETAIL OD
+			INNER  JOIN TB_DELIVERY_FEE DF
+			ON     OD.SUPPLY_COMP_CD = DF.SUPPLY_COMP_CD
+			AND    OD.DELV_FEE_CD = DF.DELV_FEE_CD
+			AND    OD.ORD_NO = DF.ORD_NO
+			WHERE  1=1
+			AND    OD.ORD_NO = #{ordNo}
+		) 
+		SELECT X.*
+		     , CP.CPN_ID
+		     , CP.CPN_NM 
+		     , CP.DC_WAY 
+		     , CP.DC_PVAL 
+		     , CP.DC_MVAL 
+		     , CP.DC_AVAL
+		FROM   (
+			SELECT Z.*
+			FROM   (
+				SELECT 1                       AS DISP_ORD
+				     , CD.GOODS_CPN_SQ         AS CPN_SQ
+				     , CD.GOODS_CPN_DC_AMT     AS CPN_DC_AMT
+				     , '상품쿠폰'                 AS CPN_TYPE
+				     , CD.GOODS_CD             AS TARGET_CD1
+				     , CD.ORD_DTL_NO           AS TARGET_CD2
+				     , CD.ORD_NO
+				     , CD.ORD_AMT
+				FROM   COUPON_DATA CD
+				UNION  ALL
+				SELECT 2                       AS DISP_ORD 
+				     , CD.CART_CPN_SQ          AS CPN_SQ
+				     , CD.CART_CPN_DC_AMT      AS CPN_DC_AMT
+				     , '장바구니쿠폰'              AS CPN_TYPE
+				     , CD.GOODS_CD             AS TARGET_CD1
+				     , CD.ORD_DTL_NO           AS TARGET_CD2
+				     , CD.ORD_NO
+				     , CD.ORD_AMT
+				FROM   COUPON_DATA CD
+				UNION  ALL
+				SELECT 3                       AS DISP_ORD 
+				     , CD.DELV_CPN_SQ 	       AS CPN_SQ
+				     , CD.DELV_CPN_DC_AMT      AS CPN_DC_AMT
+				     , '배송비쿠폰'               AS CPN_TYPE
+				     , CD.SUPPLY_COMP_CD       AS TARGET_CD1
+				     , CD.DELV_FEE_CD          AS TARGET_CD2
+				     , CD.ORD_NO
+				     , CD.DELV_FEE             AS ORD_AMT
+				FROM   COUPON_DATA CD
+				GROUP  BY CD.DELV_CPN_SQ
+				     , CD.DELV_CPN_DC_AMT
+				     , CD.SUPPLY_COMP_CD
+				     , CD.DELV_FEE_CD
+				     , CD.ORD_NO
+			) Z
+			WHERE  1=1
+			AND    Z.CPN_SQ IS NOT NULL
+		) X
+		INNER  JOIN TB_CUST_COUPON CC
+		ON     X.CPN_SQ = CC.CUST_CPN_SQ
+		LEFT   OUTER JOIN TB_COUPON CP
+		ON     CC.CPN_ID = CP.CPN_ID
+		ORDER  BY DISP_ORD
+	</select>
+	
+	<!-- 주문상세 > 포인트사용내역 -->
+	<select id="getOrderDiscountPointList" parameterType="Order" resultType="Order">
+		/* order.getOrderDiscountPointList */
+		SELECT OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , OD.GOODS_CD
+		     , G.PNT_PRATE 
+		     , G.PNT_MRATE 
+		     , OD.CURR_PRICE
+		     , OD.REAL_ORD_AMT 
+		     , CPH.PNT_AMT
+		     , CPH.OCCUR_GB 
+		     , CPH.OCCUR_DTL_DESC 
+		     , DATE_FORMAT(CPH.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN TB_CUST_POINT_HST CPH
+		ON     OD.ORD_DTL_NO = CPH.ORD_DTL_NO
+		AND    OD.ORD_NO = CPH.ORD_NO
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+		ORDER  BY CPH.REG_DT DESC
+	</select>
+	
+	<!-- 주문상세 > 상품권사용내역 -->
+	<select id="getOrderGiftcardHstList" parameterType="Order" resultType="Order">
+		/* order.getOrderGiftcardHstList */
+		SELECT CG.CUST_GFCD_SQ 
+		     , CG.CHG_GFCD_AMT 
+		     , CG.GFCD_NM 
+		     , CG.GFCD_NO 
+		     , CG.CHG_GFCD_AMT 
+		     , CG.US_GFCD_AMT 
+		     , CG.RM_GFCD_AMT 
+		     , OD.ORD_NO
+		     , OD.ORD_DTL_NO
+		     , OD.GOODS_CD 
+		     , CGH.GFCD_AMT
+		     , CGH.OCCUR_GB 
+		     , CGH.OCCUR_DTL_DESC 
+		     , DATE_FORMAT(CGH.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+		     , CG.CUST_GFCD_SQ 
+		FROM   TB_ORDER_DETAIL OD
+		INNER  JOIN TB_CUST_GIFTCARD_HST CGH
+		ON     OD.ORD_DTL_NO = CGH.ORD_DTL_NO
+		AND    OD.ORD_NO = CGH.ORD_NO
+		INNER  JOIN TB_CUST_GIFTCARD CG
+		ON     CGH.CUST_GFCD_SQ  = CG.CUST_GFCD_SQ 
+		INNER  JOIN TB_GOODS G
+		ON     OD.GOODS_CD = G.GOODS_CD
+		WHERE  1=1
+		AND    OD.ORD_NO = #{ordNo}
+		ORDER  BY CUST_GFCD_SQ
+		     , OD.ORD_NO
+		     , OD.ORD_DTL_NO
+	</select>
+
+	<!-- 주문상세 > 다다익선적용내역 -->
+	<select id="getOrderTmtbHstList" parameterType="Order" resultType="Order">
+		/* order.getOrderTmtbHstList */
+		WITH TMTB_DATA AS (
+			SELECT TM1.TMTB_SQ			AS  TMTB1_SQ
+			     , TM1.TMTB_NM			AS  TMTB1_NM
+			     , OD.TMTB1_DC_AMT
+			     , OD.ORD_NO
+			     , OD.ORD_DTL_NO
+			     , OD.REG_NO
+			     , OD.REG_DT
+			     , OD.GOODS_CD
+			     , TM2.TMTB_SQ			AS  TMTB2_SQ
+			     , TM2.TMTB_NM			AS  TMTB2_NM
+			     , OD.TMTB2_DC_AMT
+			FROM   TB_ORDER_DETAIL OD
+			INNER  JOIN TB_TMTB TM1
+			ON     OD.TMTB1_SQ = TM1.TMTB_SQ 
+			INNER  JOIN TB_TMTB TM2
+			ON     OD.TMTB2_SQ = TM2.TMTB_SQ 
+			WHERE  1=1
+			AND    OD.ORD_NO = 9
+		)
+		SELECT Z.*
+		FROM (
+			SELECT 1                    AS DISP_ORD
+			     , TD.TMTB1_SQ        	AS TMTB_SQ
+			     , TD.TMTB1_NM			AS TMTB_NM
+			     , TD.TMTB1_DC_AMT      AS TMTB_DC_AMT
+			     , TD.ORD_NO
+			     , TD.ORD_DTL_NO
+			     , TD.GOODS_CD
+			     , TD.REG_NO
+			     , DATE_FORMAT(TD.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+			FROM   TMTB_DATA TD
+			UNION  ALL
+			SELECT 2                    AS DISP_ORD
+			     , TD.TMTB2_SQ        	AS TMTB_SQ
+			     , TD.TMTB2_NM			AS TMTB_NM
+			     , TD.TMTB2_DC_AMT      AS TMTB_DC_AMT
+			     , TD.ORD_NO
+			     , TD.ORD_DTL_NO
+			     , TD.GOODS_CD
+			     , TD.REG_NO
+			     , DATE_FORMAT(TD.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
+			FROM   TMTB_DATA TD
+		) Z
+		WHERE  1=1
+		AND    Z.TMTB_SQ IS NOT NULL
+		ORDER  BY Z.DISP_ORD
+	</select>
+	
+	<!-- 주문상세 > 주문상세상태변경 -->
+	<update id="changedOrdDtlStat" parameterType="Order">
+		/* order.changedOrdDtlStat */
+		UPDATE TB_ORDER_DETAIL 
+		SET    ORD_DTL_STAT = #{ordDtlStat}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = CURRENT_TIMESTAMP() 
+		WHERE  1=1
+		AND    ORD_NO = #{ordNo}
+		AND    ORD_DTL_NO = #{ordDtlNo}
+	</update>
+	
+	<!-- 배송 > 배송지 정보 수정 -->
+	<update id="updateOrderAddr" parameterType="Order">
+		/* order.updateOrderAddr : 주문 변경 업데이트(주문자 주소) */
+		UPDATE TB_DELIVERY_ADDR
+		SET    RECIP_NM        	= #{recipNm}
+		     , RECIP_PHNNO     	= #{recipPhnno}
+		     , RECIP_TELNO     	= #{recipTelno}
+		     , RECIP_ZIPCODE    = #{recipZipcode}
+		     , RECIP_BASE_ADDR 	= #{recipBaseAddr}
+		     , RECIP_DTL_ADDR  	= #{recipDtlAddr}
+		     , DELV_MEMO       	= #{delvMemo}
+		     , UPD_NO          	= #{updNo}
+		     , UPD_DT          	= NOW()
+		WHERE  DELV_ADDR_SQ 	= #{delvAddrSq}
+	</update>
+
+	<!-- 반품/교환 > 회수지 정보 수정 -->
+	<update id="updateOrderChange" parameterType="Order">
+		/* order.updateOrderChange : 반품/교환 > 회수지 정보 수정 */
+		UPDATE TB_ORDER_CHANGE
+		SET    CHGER_ZIPCODE    = #{chgerZipCode}
+		     , CHGER_BASE_ADDR 	= #{chgerBaseAddr}
+		     , CHGER_DTL_ADDR  	= #{chgerDtlAddr}
+		     , UPD_NO          	= #{updNo}
+		     , UPD_DT          	= NOW()
+		WHERE  ORD_CHG_SQ 		= #{ordChgSq}
+	</update>
+
+
+
+
+
+
+
+
+
+</mapper>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 159 - 102
src/main/webapp/WEB-INF/views/order/CnclReqForm.html

@@ -23,21 +23,24 @@
 		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
 			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/cancel" method="post" target="hdFrameForOrderCancel">
 				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="ordChgSq" th:value="${ordChgSq}"/>
 				<input type="hidden" name="chgReason" value=""/>
 				<input type="hidden" name="chgReasonDesc" value=""/>
 				
 				<h4>주문정보</h4>
 				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 
-				<h4>취소정보</h4>
+				<h4 id="h4OrderCancelRequestToBeList">취소정보</h4>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 				
-				<h4>배송비정보</h4>
+				<h4 id="h4DelvCdList">배송비정보</h4>
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" onclick="fnCnclReq('cnclReq');">취소신청</button>
-					<button type="button" class="btn btn-success" onclick="fnCnclReq('cnclComplete');">취소완료</button>
+					<button type="button" class="btn btn-success" id="cnclReqBtn" onclick="fnCnclReq('cnclReq');">취소신청</button>
+					<button type="button" class="btn btn-success" id="cnclCompleteBtn" onclick="fnCnclReq('cnclComplete');">취소완료</button>
+					<button type="button" class="btn btn-success" id="cnclReqCancelBtn" onclick="fnCnclReq('cnclReqCancel');">취소철회</button>
+					<button type="button" class="btn btn-success" id="cnclReqCompleteBtn" onclick="fnCnclReq('cnclReqComplete');">취소승인</button>
 				</div>
 				
 				<table class="frmStyle">
@@ -53,7 +56,7 @@
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
 								</select>
 							</td>
 							<th>귀책사유</th>
@@ -135,13 +138,23 @@
 /*<![CDATA[*/
 var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상목록
 var ordNo 					= [[${ordNo}]];									// 주문번호
+var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/교환요청 정보
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var chgReason				= "";											// 변경사유코드
+var chgMemo					= "";											// 변경사유메모
+
+// 변경요청정보 승인, 철회
+if (ordChgSq > 0) {
+	chgReason				= orderChangeDetailList[0].chgReason;			// 변경사유코드
+	chgMemo					= orderChangeDetailList[0].chgMemo;				// 변경사유메모
+}
 
 var temp1 = true;
-var temp2 = false;
+var temp2 = true;
 
-// 1. 주문정보(반품대상)
+// 1. 주문정보(변경요청가능대상)
 var columnCancelReqList = [
 	{
 		headerName	: "주문상세정보",
@@ -223,21 +236,29 @@ var columnCancelReqList = [
 					var ordQty 			= parseInt(params.data.ordQty);
 					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
 					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+					var ordCanChgQty 	= parseInt(params.value);
+					var rtnStr 			= "";
 					
-					var strVal 			= "";
-					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
-					
-					for (i=0 ; i<=ordCanChgQty ; i++) {
-						if (i == params.data.ordCanChgQty) {
-							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
-						} else {
-							strVal += "	<option value='"+i+"'>"+i+"</option>";
+					// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
+					if (ordChgSq > 0) {
+						rtnStr = ordCanChgQty;
+					} else {
+						ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+						
+						rtnStr += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
+						
+						for (i=0 ; i<=ordCanChgQty ; i++) {
+							if (i == params.data.ordCanChgQty) {
+								rtnStr += "	<option value='"+i+"' selected>"+i+"</option>";
+							} else {
+								rtnStr += "	<option value='"+i+"'>"+i+"</option>";
+							}
 						}
+					
+						rtnStr += "</select>";
 					}
-				
-					strVal += "</select>";
-					return strVal;
+					
+					return rtnStr;
 				}
 			}
 		]
@@ -785,7 +806,7 @@ var isCustomer = true;
 
 // 취소정보계산
 var fnCalculateRefundAmt = function (obj) {
-	// 취소정보담은목록
+	// 변경신청목록
 	var cancelRequestTargetToBeList = [];
 
 	if (obj != null) {
@@ -797,7 +818,7 @@ var fnCalculateRefundAmt = function (obj) {
 				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
 			}
 		}
-		// 주문정보 다시 셋팅 (체크해봐야할문제)
+		// 주문변경대상정보 재설정
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
@@ -862,86 +883,88 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var arrReasonCd = reasonCd.split(":");
 	var customerReasonArr = ['G686_10'];
 
 	isCustomer = false;
 	
-	// 취소, 반품, 교환 사유 판단
+	// 귀책사유체크(취소,반품,교환)
 	for (i=0 ; i<customerReasonArr.length ; i++) {
-		if (customerReasonArr[i] == arrReasonCd[0]) {
+		if (customerReasonArr[i] == reasonCd) {
 			isCustomer = true;
 		}
 	}
 	
-	// 귀책사유설정 회사, 고객
+	// 귀책사유체크(회사,고객)
 	if (isCustomer) {
 		$("#imputeReason").text("고객");
 	} else {
 		$("#imputeReason").text("회사");
 	}
 
-	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
-
-	fnCalculateRefundAmt();			//환불예정금액 계산.
+	$('#cancelRequestFrm input[name=chgReason]').val(reasonCd);
+	
+	//환불예정금액 계산
+	fnCalculateRefundAmt();
 }
 
 // 취소신청/완료
 var fnCnclReq = function (reqGbn) {
-	
 	var temp 		= false;
-	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
+	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat;
 	var allCanYn 	= "N";
 	
-	// 1. 취소수량 체크
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
-		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
-			temp = true;
-		}
-	}
-	
-	if (temp == false) {
-		mcxDialog.alert('취소신청수량을 입력하세요.');
-		return;
-	}
-	
-	// 2. 입금대기건 & 전체취소 체크
-	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
-		alert("입금대기건은 전체 취소만 가능합니다.");
-		return;
-	}
-	
-	// 2.1 전체취소 여부 적용
-	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
-		allCanYn = "Y";	
-	}
-	
-	// 3. 취소사유 체크
-	var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
-	
-	if (gagajf.isNull(chgReason)) {
-		mcxDialog.alert("취소사유를 입력하세요."); 
-		return ;
-	}
-	
-	// 4. 환불계좌 체크
 	var accountNo 	= "";
 	var accountNm 	= "";
 	var bankCd 		= "";
 	
-	// 결제타입 무통장입금시 환불계좌 등록
-	if (payMeans == 'G014_20') {
-		var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
+	if (reqGbn == "cnclReq" || reqGbn == "cnclComplete") {
+		// 1. 취소수량 체크
+		for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
+			if (cancelRequestTargetList[i].ordCanChgQty > 0) {
+				temp = true;
+			}
+		}
+		
+		if (temp == false) {
+			mcxDialog.alert('취소신청수량을 입력하세요.');
+			return;
+		}
 		
-		if (refundAccount.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
+		// 2. 입금대기건 & 전체취소 체크
+		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
+			alert("입금대기건은 전체 취소만 가능합니다.");
 			return;
 		}
 		
-		accountNo 	= refundAccount[0].accountNo;
-		accountNm 	= refundAccount[0].accountNm;
-		bankCd 		= refundAccount[0].bankCd;
+		// 2.1 전체취소 여부 적용
+		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
+			allCanYn = "Y";	
+		}
+		
+		// 3. 취소사유 체크
+		var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
+		
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert("취소사유를 입력하세요."); 
+			return ;
+		}
+		
+		// 4. 환불계좌 체크
+		// 결제타입 무통장입금시 환불계좌 등록
+		if (payMeans == 'G014_20') {
+			var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
+			
+			if (refundAccount.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			
+			accountNo 	= refundAccount[0].accountNo;
+			accountNm 	= refundAccount[0].accountNm;
+			bankCd 		= refundAccount[0].bankCd;
+		}
+	} else {
+		
 	}
 	
 	// 5. 추가정보설정
@@ -950,49 +973,57 @@ var fnCnclReq = function (reqGbn) {
 	var chgerPhnno 	= orderInfoList[0].ordPhnno;
 	var chgerTelno 	= orderInfoList[0].ordTelno;
 
+	// 2021.01.26 화면통합
 	// 6. 취소신청, 취소완료 여부 체크
-	// 취소완료
-	if (reqGbn == "cnclComplete") {
-		cnclUrl = '/orderChange/cnclComplete/';
-	}
 	// 취소신청
-	else if (reqGbn == "cnclReq") {
-		cnclUrl = '/orderChange/cnclReq/';
+	if (reqGbn == "cnclReq") {
+		confirmStr 		= "취소신청하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclComplete/';
 	}
-	// 취소신청완료
+	// 취소완료
+	else if (reqGbn == "cnclComplete") {
+		confirmStr 		= "취소완료하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclComplete/';
+	}
+	// 취소신청승인
 	else if (reqGbn == "cnclReqComplete") {
-		cnclUrl = '/orderChange/cnclReqComplete/';
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 취소승인 처리를 하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclComplete/';
+	}
+	// 취소신청철회
+	else if (reqGbn == "cnclReqCancel") {
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?";
+		cnclUrl 		= '/orderChange/cnclReqCancel/';
 	}
 
-	// 2021.01.26 화면통합
-	cnclUrl = '/orderChange/cnclComplete/';
-	
 	var jsonObj = {
-			"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
-			,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
-			,"chgMemo"			: $('#chgMemo').val()
-			,"cancelReqList" 	: cancelRequestTargetList
-			,"accountNo" 		: accountNo
-			,"accountNm" 		: accountNm
-			,"bankCd" 			: bankCd
-			,"allCanYn" 		: allCanYn
-			,"isCustomer" 		: isCustomer
-			,"chgerNm"			: chgerNm
-			,"chgerEmail"		: chgerEmail
-			,"chgerZipcode"		: ""
-			,"chgerBaseAddr"	: ""
-			,"chgerDtlAddr"		: ""
-			,"chgerPhnno"		: chgerPhnno
-			,"chgerTelno"		: chgerTelno
-			,"reqGbn"			: reqGbn
-		}
+		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
+		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
+		,"chgMemo"			: $('#chgMemo').val()
+		,"cancelReqList" 	: cancelRequestTargetList
+		,"accountNo" 		: accountNo
+		,"accountNm" 		: accountNm
+		,"bankCd" 			: bankCd
+		,"allCanYn" 		: allCanYn
+		,"isCustomer" 		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipcode"		: ""
+		,"chgerBaseAddr"	: ""
+		,"chgerDtlAddr"		: ""
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
+		,"reqGbn"			: reqGbn
+		,"ordChgSq"			: ordChgSq
+	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
 	var jsonData = JSON.stringify(jsonObj);
 	
-	mcxDialog.confirm('취소요청하시겠습니까?', {
+	mcxDialog.confirm(confirmStr, {
 		cancelBtnText		: "취소",
-		sureBtnClick		: function(){
+		sureBtnText			: "확인",
+		sureBtnClick		: function() {
 			gagajf.ajaxJsonSubmit(
 				cnclUrl
 				, jsonData
@@ -1047,6 +1078,32 @@ $(document).ready(function() {
 		$('#wrapRefundAccount').addClass("off");
 		fnBindOrderRfAccountInfo();
 	}
+	
+	// 5. 취소신청, 취소완료, 취소승인, 취소철회 버튼 제어
+	if (ordChgSq > 0) {
+		$("#cnclReqBtn").css("display", "none");
+		$("#cnclCompleteBtn").css("display", "none");
+	} else {
+		$("#cnclReqCompleteBtn").css("display", "none");
+		$("#cnclReqCancelBtn").css("display", "none");
+	}
+	
+	// 6. 취소사유 선택
+	if (ordChgSq > 0) {
+		$("select[name='selectChgReason']").val(chgReason);										// 변경사유코드
+		$("select[name='selectChgReason']").attr("disabled", "true");							// 변경사유 비활성화
+		$("#chgMemo").text(chgMemo);															// 변경사유메모
+		$("#chgMemo").attr("disabled", "true");													// 변경사유메모 비활성화
+		fnChangeChgReason(chgReason);															// 귀책사유
+	}
+	
+	// debug mode 해제
+	if (temp2) {
+		$("#h4OrderCancelRequestToBeList").css("display", "none");
+		$("#gridOrderCancelRequestToBeList").css("display", "none");
+		$("#h4DelvCdList").css("display", "none");
+		$("#gridDelvCdList").css("display", "none");
+	}
 });
 </script>
 </html>

+ 1 - 1
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -192,7 +192,7 @@ var addDelvFeeList			= [];											// 추가배송비정보
 var exchangeRequestList		= [];											// 교환요청목록
 
 var temp1 = true;
-var temp2 = false;
+var temp2 = true;
 
 // 1. 주문정보(교환대상)
 var columnExchangeReqList = [

+ 74 - 80
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -614,8 +614,12 @@ var columnDefsOrderChangeInfo = [
 			var rtnStr = "";
 			
 			// 취소요청, 교환요청, 반품요청 일때는 요청 정보 확인 팝업 정보
-			if (params.data.chgStat == 'G685_20' || params.data.chgStat == 'G685_30' || params.data.chgStat == 'G685_40') {
+			if (params.data.chgStat == 'G685_20') {
 				rtnStr = '<a href="javascript:void(0);" onclick="fnCancelRequest(\'' + params.value + '\');">' + params.value + '</a>';
+			} else if (params.data.chgStat == 'G685_40') {
+				rtnStr = '<a href="javascript:void(0);" onclick="fnReturnRequest(\'' + params.value + '\');">' + params.value + '</a>';
+			} else if (params.data.chgStat == 'G685_30') {
+				rtnStr = '<a href="javascript:void(0);" onclick="fnExchangeRequest(\'' + params.value + '\');">' + params.value + '</a>';
 			} else {
 				rtnStr = params.value;
 			}
@@ -623,12 +627,13 @@ var columnDefsOrderChangeInfo = [
 			return  rtnStr;
 		}
 	},
-	{headerName: "요청구분"		, field: "chgGbNm"		, width: 100	, cellClass: 'text-center'},
+	/*{headerName: "요청구분"		, field: "chgGbNm"		, width: 100	, cellClass: 'text-center'},*/
+	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
 	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "옵션1"			, field: "optCd1"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center'},
 	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
+	/*{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},*/
 	{
 		headerName		: "요청일자"		
 		, field			: "regDt"		
@@ -955,7 +960,7 @@ $(document).ready(function () {
 	});
 	// 반품요청
 	$('#btnReturn').on('click', function () {
-		fnReturnRequest(ordNo, 'N');
+		fnReturnRequest();
 	});
 	// 교환요청
 	$('#btnExchange').on('click', function () {
@@ -1014,21 +1019,80 @@ var fnCancelRequest = function (ordChgSq) {
 	cfnOpenModalPopup(actionUrl, 'popupCancelRequestForm');
 };
 
-
-
+//2021.01.25 추가
 // 반품요청
-var fnReturnRequest = function () {
-	var actionUrl = "/orderChange/rtn/req/form?ordNo=" + ordNo;
+var fnReturnRequest = function (ordChgSq) {
+	
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	if (ordChgSq == null) {
+		ordChgSq = 0;
+	}
+	
+	var actionUrl = "/orderChange/rtn/req/form?ordNo=" + ordNo + "&ordChgSq=" + ordChgSq;
+	
 	cfnOpenModalPopup(actionUrl, 'popupReturnRequestForm');
 };
 
 // 교환요청
-var fnExchangeRequest = function () {
-	var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo;
+var fnExchangeRequest = function (ordChgSq) {
+	
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	if (ordChgSq == null) {
+		ordChgSq = 0;
+	}
+	
+	var actionUrl = "/orderChange/exchange/request/form?ordNo=" + ordNo + "&ordChgSq=" + ordChgSq;
 	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
 };
 
 
+// 반품요청 철회
+var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordChgSq = ordChgSq;
+			data.ordDtlNo = ordDtlNo;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/return/request/cancel'
+				, jsonData
+				, function (result) {
+					if (result.message != '회수컨펌 된 내역이 있습니다.') {
+						var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
+						gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
+					}
+				}
+			);
+		}
+	});
+};
+
+// 교환요청 철회
+var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
+	mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
+		cancelBtnText	: "취소",
+		sureBtnText		: "확인",
+		sureBtnClick	: function () {
+			var data = new Object();
+			data.ordNo 		= ordNo;
+			data.ordDtlNo 	= ordDtlNo;
+			data.ordChgSq 	= ordChgSq;
+			
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit(
+				'/order/exchange/request/cancel'
+				, jsonData, function () {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+				}
+			);
+		}
+	});
+};
 
 // 주문상품 상세 변경 이력 팝업
 var fnOrderDetailChangeHst = function (ordDtlNo) {
@@ -1164,54 +1228,6 @@ var fnSaveChgerAddr = function (rowIdx) {
 	});
 }
 
-// 반품요청 철회
-var fnReturnReqeustCancel = function (ordChgSq, ordDtlNo, rowIdx) {
-	mcxDialog.confirm('반품요청을 철회하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordChgSq = ordChgSq;
-			data.ordDtlNo = ordDtlNo;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/return/request/cancel'
-				, jsonData
-				, function (result) {
-					if (result.message != '회수컨펌 된 내역이 있습니다.') {
-						var selectedRow = gridOptionsOrderChangeInfo.api.getRowNode(rowIdx).data;
-						gridOptionsOrderChangeInfo.api.updateRowData({remove: [selectedRow]});
-					}
-				}
-			);
-		}
-	});
-};
-
-// 교환요청 철회
-var fnExchangeReqeustCancel = function (ordChgSq, ordNo, ordDtlNo, rowIdx) {
-	mcxDialog.confirm('교환요청을 취소하시겠습니까?', {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordNo 		= ordNo;
-			data.ordDtlNo 	= ordDtlNo;
-			data.ordChgSq 	= ordChgSq;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/exchange/request/cancel'
-				, jsonData, function () {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-				}
-			);
-		}
-	});
-};
-
 // LMS 전송
 var fnOpenLmsForm = function (orderPhnno, custNo) {
 	if (gagajf.isNull(custNo) && gagajf.isNull(orderPhnno)) {
@@ -1258,28 +1274,6 @@ var fnReceiptPage = function (tid) {
 	window.open(fullUrl, '_blank');
 };
 
-// 수동 회수 지시 
-var fnWdinvocieSend = function (ordChgSq) {
-	mcxDialog.confirm("요청번호 [" + ordChgSq + "] 회수지시 처리 하시겠습니까? <br> 시스템에서 회수지시를 보내지는않습니다.", {
-		cancelBtnText	: "취소",
-		sureBtnText		: "확인",
-		sureBtnClick	: function () {
-			var data = new Object();
-			data.ordChgSq = ordChgSq;
-			
-			var jsonData = JSON.stringify(data);
-			gagajf.ajaxJsonSubmit(
-				'/order/wdinvoice/send/save'
-				, jsonData
-				, function (result) {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-				}
-			);
-		}
-	});
-};
-
 // 구매확정철회
 var fnChangedCompleteDelivery = function (ordNo, ordDtlNo, ordDtlStat) {
 	if ('70' !== ordDtlStat) {

+ 189 - 107
src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html → src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -23,20 +23,23 @@
 		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
 			<form id="cancelRequestFrm" name="cancelRequestFrm" action="/orderChange/return" method="post" target="hdFrameForOrderCancel">
 				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="ordChgSq" th:value="${ordChgSq}"/>
 				<input type="hidden" name="chgReason" value=""/>
 				<input type="hidden" name="chgReasonDesc" value=""/>
 				
 				<h4>주문정보</h4>
 				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 
-				<h4>반품정보</h4>
+				<h4 id="h4OrderCancelRequestToBeList">반품정보</h4>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
 				
-				<h4>배송비정보</h4>
+				<h4 id="h4DelvCdList">배송비정보</h4>
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" id="btnCancelRequestPartOk" onclick="fnCancelRequestPartOk();">요청</button>
+					<button type="button" class="btn btn-success" id="rtnReqBtn" onclick="fnCnclReq('rtnReq');">반품신청</button>
+					<button type="button" class="btn btn-success" id="rtnReqCancelBtn" onclick="fnCnclReq('rtnReqCancel');">반품철회</button>
+					<!-- <button type="button" class="btn btn-success" id="rtnReqCancelBtn" onclick="fnCnclReq('rtnReqComplete');">반품승인</button> -->
 				</div>
 				
 				<table class="frmStyle">
@@ -52,7 +55,7 @@
 							<td>
 								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
 									<option value="">[선택하세요]</option>
-									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|"></option>
 								</select>
 							</td>
 							<th>귀책사유</th>
@@ -186,14 +189,24 @@
 /*<![CDATA[*/
 var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상목록
 var ordNo 					= [[${ordNo}]];									// 주문번호
+var ordChgSq 				= [[${ordChgSq}]];								// 주문변경번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
-var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var orderDelvRtnAddrInfo	= [[${orderDelvRtnAddrInfo}]];					// 회수지정보
+var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/교환요청 정보
+var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var chgReason				= "";											// 변경사유코드
+var chgMemo					= "";											// 변경사유메모
+
+// 변경요청정보 승인, 철회
+if (ordChgSq > 0) {
+	chgReason				= orderChangeDetailList[0].chgReason;			// 변경사유코드
+	chgMemo					= orderChangeDetailList[0].chgMemo;				// 변경사유메모
+}
 
 var temp1 = true;
-var temp2 = false;
+var temp2 = true;
 
-// 1. 주문정보(반품대상)
+// 1. 주문정보(변경요청가능대상)
 var columnCancelReqList = [
 	{
 		headerName	: "주문상세정보",
@@ -275,21 +288,28 @@ var columnCancelReqList = [
 					var ordQty 			= parseInt(params.data.ordQty);
 					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
 					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
-					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+					var ordCanChgQty 	= parseInt(params.value);
+					var rtnStr 			= "";
 					
-					var strVal 			= "";
-					strVal += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
-					
-					for (i=0 ; i<=ordCanChgQty ; i++) {
-						if (i == params.data.ordCanChgQty) {
-							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
-						} else {
-							strVal += "	<option value='"+i+"'>"+i+"</option>";
+					// 취소신청가능수량있으면 수량만 표시 (취소,반품,교환 신청정보 처리)
+					if (ordChgSq > 0) {
+						rtnStr 			= ordCanChgQty;
+					} else {
+						ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+						
+						rtnStr += "<select class='ordCanChgQty' name='ordCanChgQty' ordDtlNo='"+params.data.ordDtlNo+"' onChange='fnCalculateRefundAmt(this);'>";
+						
+						for (i=0 ; i<=ordCanChgQty ; i++) {
+							if (i == params.data.ordCanChgQty) {
+								rtnStr += "	<option value='"+i+"' selected>"+i+"</option>";
+							} else {
+								rtnStr += "	<option value='"+i+"'>"+i+"</option>";
+							}
 						}
+					
+						rtnStr += "</select>";
 					}
-				
-					strVal += "</select>";
-					return strVal;
+					return rtnStr;
 				}
 			}
 		]
@@ -837,7 +857,7 @@ var isCustomer = true;
 
 // 취소정보계산
 var fnCalculateRefundAmt = function (obj) {
-	// 취소정보담은목록
+	// 변경신청목록
 	var cancelRequestTargetToBeList = [];
 
 	if (obj != null) {
@@ -849,7 +869,7 @@ var fnCalculateRefundAmt = function (obj) {
 				cancelRequestTargetList[i].ordCanChgQty = ordCanChgQty;
 			}
 		}
-		// 주문정보 다시 셋팅 (체크해봐야할문제)
+		// 주문변경대상정보 재설정
 		gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	}
 	
@@ -914,126 +934,162 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var arrReasonCd = reasonCd.split(":");
 	var customerReasonArr = ['G688_10', 'G688_11', 'G688_12', 'G688_13', 'G688_15' , 'G688_21', 'G688_30'];
 
 	isCustomer = false;
 	
-	// 취소, 반품, 교환 사유 판단
+	// 귀책사유체크(취소,반품,교환)
 	for (i=0 ; i<customerReasonArr.length ; i++) {
-		if (customerReasonArr[i] == arrReasonCd[0]) {
+		if (customerReasonArr[i] == reasonCd) {
 			isCustomer = true;
 		}
 	}
 	
-	// 귀책사유설정 회사, 고객
+	// 귀책사유체크(회사,고객)
 	if (isCustomer) {
 		$("#imputeReason").text("고객");
 	} else {
 		$("#imputeReason").text("회사");
 	}
 
-	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
+	$('#cancelRequestFrm input[name=chgReason]').val(reasonCd);
 	
-	//환불예정금액 계산.
-	fnCalculateRefundAmt();			
+	//환불예정금액 계산
+	fnCalculateRefundAmt();
 }
 
 // 반품요청
-var fnCancelRequestPartOk = function () {
-	var temp 		= false;
-	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
-	var allCanYn 	= "N";
-	
-	// 1. 취소수량 체크
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
-		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
-			temp = true;
-		}
-	}
+var fnCnclReq = function (reqGbn) {
+	var temp 			= false;
+	var ordDtlStat		= cancelRequestTargetList[0].ordDtlStat; 
+	var allCanYn 		= "N";
 	
-	if (temp == false) {
-		mcxDialog.alert('취소 할 수량을 입력하세요.');
-		return;
-	}
+	var accountNo 		= "";
+	var accountNm 		= "";
+	var bankCd 			= "";
 	
-	// 2. 입금대기건 && 전체취소 체크
-	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
-		alert("입금대기건은 전체 취소만 가능합니다.");
-		return;
-	}
+	var chgerNm			= "";
+	var chgerZipcode	= "";
+	var chgerBaseAddr	= "";
+	var chgerDtlAddr	= "";
 	
-	// 2.1 전체취소 여부 적용
-	if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
-		allCanYn = "Y";	
-	}
+	var chgerPhnno1		= "";
+	var chgerPhnno2		= "";
+	var chgerPhnno3		= "";
 	
-	// 3. 취소사유 체크
-	var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
+	var chgerTelno1		= "";
+	var chgerTelno2		= "";
+	var chgerTelno3		= "";
 	
-	if (gagajf.isNull(chgReason)) {
-		mcxDialog.alert("취소사유를 입력하세요."); 
-		return ;
-	}
+	var chgerPhnno 		= "";
+	var chgerTelno 		= "";
+	var chgerEmail 		= "";
 	
-	// 4. 환불계좌 체크
-	var accountNo 	= "";
-	var accountNm 	= "";
-	var bankCd 		= "";
-	
-	// 결제타입이 무통장 입금일때 사용
-	if (payMeans == 'G014_20') {
-		var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
+	if (reqGbn == "rtnReq") {
+		// 1. 취소수량 체크
+		for (i=0 ; i<cancelRequestTargetList.length ; i++) {		
+			if (cancelRequestTargetList[i].ordCanChgQty > 0) {
+				temp = true;
+			}
+		}
 		
-		if (refundAccount.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
+		if (temp == false) {
+			mcxDialog.alert('취소 할 수량을 입력하세요.');
 			return;
 		}
 		
-		accountNo 	= refundAccount[0].accountNo;
-		accountNm 	= refundAccount[0].accountNm;
-		bankCd 		= refundAccount[0].bankCd;
-	}
-	
-	// 5. 회수지정보설정
-	var chgerNm			= $("#cancelRequestFrm input[name=chgerNm]").val();
-	var chgerZipcode	= $("#cancelRequestFrm input[name=chgerZipcode]").val();
-	var chgerBaseAddr	= $("#cancelRequestFrm input[name=chgerBaseAddr]").val();
-	var chgerDtlAddr	= $("#cancelRequestFrm input[name=chgerDtlAddr]").val();
-	
-	var chgerPhnno1		= $("#cancelRequestFrm select[name=chgerPhnno1]").val();
-	var chgerPhnno2		= $("#cancelRequestFrm input[name=chgerPhnno2]").val();
-	var chgerPhnno3		= $("#cancelRequestFrm input[name=chgerPhnno3]").val();
-	
-	var chgerTelno1		= $("#cancelRequestFrm select[name=chgerTelno1]").val();
-	var chgerTelno2		= $("#cancelRequestFrm input[name=chgerTelno2]").val();
-	var chgerTelno3		= $("#cancelRequestFrm input[name=chgerTelno3]").val();
+		// 2. 입금대기건 && 전체취소 체크
+		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() != $("#spanRefundAmt").text()) {
+			alert("입금대기건은 전체 취소만 가능합니다.");
+			return;
+		}
+		
+		// 2.1 전체취소 여부 적용
+		if (ordDtlStat == "G013_10" && $("#spanPayAmt").text() == $("#spanRefundAmt").text()) {
+			allCanYn = "Y";	
+		}
+		
+		// 3. 취소사유 체크
+		var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
+		
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert("취소사유를 입력하세요."); 
+			return ;
+		}
+		
+		// 4. 환불계좌 체크
+		// 결제타입이 무통장 입금일때 사용
+		if (payMeans == 'G014_20') {
+			var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
+			
+			if (refundAccount.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			
+			accountNo 	= refundAccount[0].accountNo;
+			accountNm 	= refundAccount[0].accountNm;
+			bankCd 		= refundAccount[0].bankCd;
+		}
+		
+		// 5. 회수지정보설정
+		chgerNm			= $("#cancelRequestFrm input[name=chgerNm]").val();
+		chgerZipcode	= $("#cancelRequestFrm input[name=chgerZipcode]").val();
+		chgerBaseAddr	= $("#cancelRequestFrm input[name=chgerBaseAddr]").val();
+		chgerDtlAddr	= $("#cancelRequestFrm input[name=chgerDtlAddr]").val();
+		
+		chgerPhnno1		= $("#cancelRequestFrm select[name=chgerPhnno1]").val();
+		chgerPhnno2		= $("#cancelRequestFrm input[name=chgerPhnno2]").val();
+		chgerPhnno3		= $("#cancelRequestFrm input[name=chgerPhnno3]").val();
+		
+		chgerTelno1		= $("#cancelRequestFrm select[name=chgerTelno1]").val();
+		chgerTelno2		= $("#cancelRequestFrm input[name=chgerTelno2]").val();
+		chgerTelno3		= $("#cancelRequestFrm input[name=chgerTelno3]").val();
 
-	if (gagajf.isNull(chgerZipcode)) {
-		mcxDialog.alert("회수지주소를 입력하세요."); return;
-	}
-	if (gagajf.isNull(chgerBaseAddr)) {
-		mcxDialog.alert("회수지주소를 입력하세요."); return;
-	}
-	if (gagajf.isNull(chgerDtlAddr)) {
-		mcxDialog.alert("회수지주소를 입력하세요."); return;
+		if (gagajf.isNull(chgerZipcode)) {
+			mcxDialog.alert("회수지주소를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerBaseAddr)) {
+			mcxDialog.alert("회수지주소를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerDtlAddr)) {
+			mcxDialog.alert("회수지주소를 입력하세요."); return;
+		}
+		
+		if (gagajf.isNull(chgerPhnno1)) {
+			mcxDialog.alert("휴대전화를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerPhnno2)) {
+			mcxDialog.alert("휴대전화를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerPhnno3)) {
+			mcxDialog.alert("휴대전화를 입력하세요."); return;
+		}
+		
+		chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
+		chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
+		chgerEmail 		= orderInfoList[0].ordEmail;
+	} else {
+		
 	}
 	
-	if (gagajf.isNull(chgerPhnno1)) {
-		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	// 2021.01.26 화면통합
+	// 6. 취소신청, 취소완료 여부 체크
+	// 반품신청
+	if (reqGbn == "rtnReq") {
+		confirmStr 		= "취소신청하시겠습니까?";
+		cnclUrl 		= '/orderChange/rtnReq/';
 	}
-	if (gagajf.isNull(chgerPhnno2)) {
-		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	// 반품신청승인
+	else if (reqGbn == "rtnReqComplete") {
+
 	}
-	if (gagajf.isNull(chgerPhnno3)) {
-		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	// 반품신청철회
+	else if (reqGbn == "rtnReqCancel") {
+		confirmStr 		= "요청번호 [" + ordChgSq + "] 에 대한 요청철회 처리를 하시겠습니까?";
+		cnclUrl 		= '/orderChange/rtnReqCancel/';
 	}
-	
-	var chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
-	var chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
-	var chgerEmail 		= orderInfoList[0].ordEmail;
-	
+
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
 		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
@@ -1051,6 +1107,7 @@ var fnCancelRequestPartOk = function () {
 		,"chgerDtlAddr"		: chgerDtlAddr
 		,"chgerPhnno"		: chgerPhnno
 		,"chgerTelno"		: chgerTelno
+		,"ordChgSq"			: ordChgSq
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1061,7 +1118,7 @@ var fnCancelRequestPartOk = function () {
 		sureBtnClick		: function(){
 			// 취소 실행
 			gagajf.ajaxJsonSubmit(
-				'/orderChange/returnRequest/'
+					cnclUrl
 				, jsonData
 				, function() {
 					uifnPopupClose('popupOrderDetail');
@@ -1157,6 +1214,31 @@ $(document).ready(function() {
 	
 	// 5. 회수지정보설정
 	fnSetChger();
+	
+	// 6. 반품신청, 반품승인, 반품철회 버튼 제어
+	if (ordChgSq > 0) {
+		$("#rtnReqBtn").css("display", "none");
+	} else {
+		$("#rtnReqCompleteBtn").css("display", "none");
+		$("#rtnReqCancelBtn").css("display", "none");
+	}
+	
+	// 7. 취소사유 선택
+	if (ordChgSq > 0) {
+		$("select[name='selectChgReason']").val(chgReason);										// 변경사유코드
+		$("select[name='selectChgReason']").attr("disabled", "true");							// 변경사유 비활성화
+		$("#chgMemo").text(chgMemo);															// 변경사유메모
+		$("#chgMemo").attr("disabled", "true");													// 변경사유메모 비활성화
+		fnChangeChgReason(chgReason);															// 귀책사유
+	}
+	
+	// debug mode 해제
+	if (temp2) {
+		$("#h4OrderCancelRequestToBeList").css("display", "none");
+		$("#gridOrderCancelRequestToBeList").css("display", "none");
+		$("#h4DelvCdList").css("display", "none");
+		$("#gridDelvCdList").css("display", "none");
+	}
 });
 </script>
 </html>