瀏覽代碼

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

gagamel 5 年之前
父節點
當前提交
29f8a86df3

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

@@ -276,4 +276,43 @@ public interface TscOrderChangeDao {
 	 */
 	Order getAddDeliveryFeePayment(OrderChange orderChange);
 
+	/**
+	 * 추가배송비 결제 취소 정보 생성
+	 *
+	 * @param Order - 주문 정보
+	 * @return 
+	 * @author card007
+	 * @since 2021. 02. 02
+	 */
+	int createAddDeliveryFeeCancelPayment(Order order);
+
+	/**
+	 * 교환철회 주문상세 상태코드 변경
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author card007
+	 * @since 2021. 02. 02
+	 */
+	int updateOrderDetailForExchangeCancel(Order order);
+
+	/**
+	 * 교환철회 주문단품상세 상태코드 변경
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author card007
+	 * @since 2021. 02. 02
+	 */
+	int updateOrderDetailItemForExchangeCancel(Order order);
+
+	/**
+	 * 교환철회 주문상세단품정보 이력 생성
+	 *
+	 * @param Order - 주문 정보
+	 * @return
+	 * @author card007
+	 * @since 2021. 02. 02
+	 */
+	int createOrderDetailItemHstForExchangeCancel(Order order);
 }

+ 73 - 0
src/main/java/com/style24/core/biz/dao/TscOrderDao.java

@@ -348,5 +348,78 @@ public interface TscOrderDao {
 	 * @since 2021. 01. 18
 	 */
 	void updateOrderChange(Order order);
+	
+	
+	
+	/**
+	 * 장바구니 상품 목록 조회 (업체별 배송단위)
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	Collection<Order> getCartGoodsList(Order order);
+	
+	/**
+	 * 고객정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	Order getCustemerInfo(Order order);
+	
+	/**
+	 * 배송지정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	Order getDeliveryAddrInfo(Order order);	
 
+	/**
+	 * 포인트정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	int getCustPointInfo(Order order);
+	
+	/**
+	 * 상품권정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	int getGiftcardInfo(Order order);
+	
+	/**
+	 * 즉시할인 적용 상품 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	Collection<Order> getCpn1ApplyGoodsList(Order order);
+	
+	/**
+	 * 상품쿠폰, 장바구니쿠폰 적용 상품 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	Collection<Order> getGoodsCartCpnApplyGoodsList(Order order);
+	
+	/**
+	 * 총알배송 가능 지역 체크
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	int getDailyDeliveryZoneInfo(Order order);
 }

+ 49 - 17
src/main/java/com/style24/core/biz/service/TscOrderChangeService.java

@@ -126,7 +126,7 @@ public class TscOrderChangeService {
 		Order order = new Order();
 		order.setOrdNo(mav.getInt("ordNo"));
 		order.setOrdChgSq(mav.getInt("ordChgSq"));
-		order.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL_CANCEL.value());
+		order.setChgStat(TscConstants.OrderChangeStat.CANCEL_CANCEL.value());
 		order.setRegNo(userNo);
 		order.setUpdNo(userNo);
 		order.setDelYn("Y");
@@ -306,7 +306,7 @@ public class TscOrderChangeService {
 							Order order = new Order();
 							order.setOrdNo(mav.getInt("ordNo"));
 							order.setOrdChgSq(mav.getInt("ordChgSq"));
-							order.setOrdDtlStat(TscConstants.OrderChangeStat.CANCEL_COMPLETE.value());
+							order.setChgStat(TscConstants.OrderChangeStat.CANCEL_COMPLETE.value());
 							order.setUpdNo(userNo);
 							order.setDelYn("N");
 							orderChangeDao.updateOrderChangeDtlCancel(order);
@@ -464,6 +464,7 @@ public class TscOrderChangeService {
 		String allCanYn		= mav.getString("allCanYn").toString();								// 무통장입금전 전체취소 여부
 		String isCustomer	= mav.getString("isCustomer").toString();							// 귀책사유 (고객, 회사)
 		String chgGb		= TscConstants.OrderChangeGb.RETURN.value(); 						// 반품요청
+		String wdGb			= mav.getString("wdGb");											// 회수방법
 		
 		// 4. 주문상세단품정보등록,변경 (단품단위)
 		List<Order> cancelOrderDetailList = new ArrayList<Order>();
@@ -509,6 +510,7 @@ public class TscOrderChangeService {
 				orderChange.setChgMemo(chgMemo);
 				orderChange.setAddPayCost(0);
 				orderChange.setAddPayAmt(0);
+				orderChange.setWdGb(wdGb);
 				orderChange.setRegNo(userNo);
 				orderChange.setUpdNo(userNo);
 				
@@ -520,16 +522,16 @@ public class TscOrderChangeService {
 				String chgerZipcode 	= mav.getString("chgerZipcode").toString();		// 변경우편번호
 				String chgerBaseAddr 	= mav.getString("chgerBaseAddr").toString();	// 변경기본주소
 				String chgerDtlAddr 	= mav.getString("chgerDtlAddr").toString();		// 변경상세주소
+				String chgerRtnMemo		= mav.getString("chgerRtnMemo");				// 반품메모
 				
 				orderChange.setChgerNm(chgerNm);
 				orderChange.setChgerPhnno(chgerPhnno);
 				orderChange.setChgerTelno(chgerTelno);
 				orderChange.setChgerEmail(chgerEmail);
-				orderChange.setChgerRtnMemo("");
+				orderChange.setChgerRtnMemo(chgerRtnMemo);
 				orderChange.setChgerZipcode(chgerZipcode);
 				orderChange.setChgerBaseAddr(chgerBaseAddr);
 				orderChange.setChgerDtlAddr(chgerDtlAddr);
-				orderChange.setChgerRtnMemo("");
 				
 				orderChangeDao.createOrderChange(orderChange);
 				
@@ -619,7 +621,7 @@ public class TscOrderChangeService {
 		Order order = new Order();
 		order.setOrdNo(mav.getInt("ordNo"));
 		order.setOrdChgSq(mav.getInt("ordChgSq"));
-		order.setOrdDtlStat(TscConstants.OrderChangeStat.RETURN_CANCEL.value());
+		order.setChgStat(TscConstants.OrderChangeStat.RETURN_CANCEL.value());
 		order.setRegNo(userNo);
 		order.setUpdNo(userNo);
 		order.setDelYn("Y");
@@ -882,31 +884,61 @@ public class TscOrderChangeService {
 	 * @author card007
 	 * @since 2021. 02. 01
 	 */
+	@Transactional("shopTxnManager")
 	public GagaMap exchangeCancel(OrderChange orderChange) {
 		GagaMap result = new GagaMap();
 
-		int ordNo = orderChange.getOrdNo();
-		int ordChgSq = orderChange.getOrdChgSq();
+		int ordNo = orderChange.getOrdNo();					// 주문번호
+		int ordChgSq = orderChange.getOrdChgSq();			// 주문변경번호
+		int regNo = orderChange.getRegNo();					// 등록자번호
+		int updNo = orderChange.getUpdNo();					// 수정자번호
 
 		// 추가배송비 조회
 		Order payment = orderChangeDao.getAddDeliveryFeePayment(orderChange);
 
 		// 추가배송비 결제취소 처리
-		if (payment != null) {
+		if (payment != null && payment.getPayAmt() > 0) {
+			payment.setOrdNo(ordNo);
+			payment.setOrdChgSq(ordChgSq);
+			payment.setPayAmt(payment.getPayAmt() * -1);
+			payment.setPayStat(TscConstants.PaymentStat.PAYMENT_WAIT.value());
+			payment.setPayGb(TscConstants.PaymentGb.DELIVERY.value());
+			payment.setRegNo(regNo);
+			payment.setUpdNo(updNo);
+			orderChangeDao.createAddDeliveryFeeCancelPayment(payment);
 			
+			// TODO
+			// PG취소처리
 		}
 
-		
-		// TB_ORDER_CHANGE.addPayCost > 0
-		// TB_DELIVERY_FEE.paySq <> 0
-		// TB_PAYMENT ORD_NO, ORD_CHG_SQ 조회조건 걸어서 sum(pay_amt > 0) 취소 안한놈임 
-		// PG 취소 떤짐
-		
+		// 교환철회 처리
+		Order exchangeCancel = new Order();
+		exchangeCancel.setOrdNo(ordNo);
+		exchangeCancel.setOrdChgSq(ordChgSq);
+		exchangeCancel.setOrdDtlStat(TscConstants.OrderDetailStat.EXCHANGE_CANCEL.value());
+		exchangeCancel.setChgStat(TscConstants.OrderChangeStat.EXCHANGE_CANCEL.value());
+		exchangeCancel.setDelYn("Y");
+		exchangeCancel.setRegNo(regNo);
+		exchangeCancel.setUpdNo(updNo);
+
 		// TB_ORDER_DETAIL 상태값 변경
+		orderChangeDao.updateOrderDetailForExchangeCancel(exchangeCancel);
+
+		// TB_ORDER_DETAIL_HST 생성
+		orderChangeDao.createOrderDtlHstCancel(exchangeCancel);
+
 		// TB_ORDER_DETAIL_ITEM 상태값 변경
-		// TB_ORDER_CHANGE 상태값 변경
-		// TB_ORDER_CHANGE_DETAIL DEL_YN Y로 업데이트
-		// 
+		orderChangeDao.updateOrderDetailItemForExchangeCancel(exchangeCancel);
+
+		// TB_ORDER_DETAIL_ITEM_HST 생성
+		orderChangeDao.createOrderDetailItemHstForExchangeCancel(exchangeCancel);
+
+		// TB_ORDER_CHANGE_DETAIL 상태값 변경 및 DEL_YN Y로 업데이트
+		orderChangeDao.updateOrderChangeDtlCancel(exchangeCancel);
+
+		// 결과값 처리
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
 		return result;
 	}
 

+ 90 - 0
src/main/java/com/style24/core/biz/service/TscOrderService.java

@@ -564,5 +564,95 @@ public class TscOrderService {
 	public void updateOrderChange(Order order) {
 		orderDao.updateOrderChange(order);
 	}
+	
+	
+	
+	/**
+	 * 장바구니 상품 목록 조회 (업체별 배송단위)
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public Collection<Order> getCartGoodsList(Order order) {
+		return orderDao.getCartGoodsList(order);
+	}
+	
+	/**
+	 * 고객정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public Order getCustemerInfo(Order order) {
+		return orderDao.getCustemerInfo(order);
+	}
+	
+	/**
+	 * 배송지정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public Order getDeliveryAddrInfo(Order order) {
+		return orderDao.getDeliveryAddrInfo(order);
+	}
+
+	/**
+	 * 포인트정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public int getCustPointInfo(Order order) {
+		return orderDao.getCustPointInfo(order);
+	}
+	
+	/**
+	 * 상품권정보 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public int getGiftcardInfo(Order order) {
+		return orderDao.getGiftcardInfo(order);
+	}
+	
+	/**
+	 * 즉시할인 적용 상품 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public Collection<Order> getCpn1ApplyGoodsList(Order order) {
+		return orderDao.getCpn1ApplyGoodsList(order);
+	}
+	
+	/**
+	 * 상품쿠폰, 장바구니쿠폰 적용 상품 조회
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public Collection<Order> getGoodsCartCpnApplyGoodsList(Order order) {
+		return orderDao.getGoodsCartCpnApplyGoodsList(order);
+	}
+	
+	/**
+	 * 총알배송 가능 지역 체크
+	 *
+	 * @param Order
+	 * @author jsh77b
+	 * @since 2021. 02. 02
+	 */	
+	public int getDailyDeliveryZoneInfo(Order order) {
+		return orderDao.getDailyDeliveryZoneInfo(order);
+	}
 
 }

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

@@ -271,6 +271,23 @@ public class TscConstants {
 			return value;
 		}
 	}
+	
+	// 결제구분
+	public enum PaymentGb {
+		ORDER("O"),							// 주문시결제
+		DELIVERY("D"),						// 배송시결제
+		ERROR("E");							// 에러(강제 결제 태울 때 또는 에러일 때)
+
+		private String value;
+
+		private PaymentGb(String value) {
+			this.value = value;
+		}
+
+		public String value() {
+			return value;
+		}
+	}
 
 	// 결제상태
 	public enum PaymentStat {

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

@@ -120,6 +120,10 @@ public class Order extends TscBaseDomain {
 	private String chgGb;
 	private String wdInvoiceSendYn;
 	
+	private int cancelRequestQty;
+	private int exchangeRequestQty;
+	private int returnRequestQty;
+	
 	// 상품정보
 	private String imgPath1;
 	private String sysImgNm;
@@ -168,6 +172,7 @@ public class Order extends TscBaseDomain {
 	private String recipZipcode;
 	private String recipBaseAddr;
 	private String recipDtlAddr;
+	private String recipAddr;
 	private String ordEmail;
 	private String delvMemo;
 	private String delvAddrEditYn;

+ 1 - 1
src/main/java/com/style24/persistence/mybatis/shop/TscCustomer.xml

@@ -335,7 +335,7 @@
 	<update id="updateCustomerSecedeInfo" parameterType="Customer">
 		/* TscCustomer.updateCustomerSecedeInfo */
 		UPDATE TB_CUSTOMER
-		SET    CUST_ID = 'secede_cust'
+		SET    CUST_ID = CONCAT('secede_cust_',#{custNo})
 		     , CUST_STAT = #{custStat}
 		     , SECEDE_RSN = #{secedeRsn}
 		     , SECEDE_DTL_RSN = #{secedeDtlRsn}

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

@@ -6,160 +6,159 @@
 	<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
+		  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
+		<if test="(chgStat != null and chgStat != '') or (chgGb != null and chgGb != '')">
+		  LEFT OUTER JOIN (
+			SELECT OCD.ORD_DTL_NO
+			     , OC.CHG_GB
+			     , 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
+			     , OC.CHG_GB
 			     , 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 OC.WD_INVOICE_NO, OC.WD_INVOICE_SEND_YN, OC.SHIP_COMP_CD, OCD.ORD_DTL_NO, OCD.CHG_QTY, OCD.CHG_STAT
 		) OCD
-		ON     OD.ORD_DTL_NO = OCD.ORD_DTL_NO
-		WHERE  1=1
+		    ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		</if>
+	 	 WHERE 1=1
 		<if test='siteCd != null and siteCd != ""'>
-		AND    O.SITE_CD = #{siteCd}
+		   AND O.SITE_CD = #{siteCd}
 		</if>
 		<if test='mallCd != null and mallCd != ""'>
-		AND    O.MALL_GB = #{mallCd}
+		   AND O.MALL_GB = #{mallCd}
 		</if>
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
-		AND    OD.SUPPLY_COMP_CD = #{supplyCompCd}
+		   AND OD.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
 		<if test="multiBrand != null and multiBrand != ''">
-		AND    G1.BRAND_CD IN
+		   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
+		   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
+		   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}
+		   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 test="chgGb != null and chgGb != ''">
+		   AND OCD.CHG_GB = #{chgGb}
 		</if>
 		<if test='search != null and search == "searchOrdNo"'>
 			<if test="condition != null and condition != ''">
-		AND    O.ORD_NO = #{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}
+		   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}
+		   AND OD.AGENT_ORDER_ID = #{condition}
 			</if>
 		</if>
 		<if test='payMeans != null and payMeans != ""'>
-		AND    P.PAY_MEANS = #{payMeans}
+		   AND P.PAY_MEANS = #{payMeans}
 		</if>
 		<if test='orderNm != null and orderNm != ""'>
-		AND    O.ORD_NM = #{orderNm}
+		   AND O.ORD_NM = #{orderNm}
 		</if>
 		<if test='custId != null and custId != ""'>
-		AND    O.CUST_NO = #{custId}
+		   AND O.CUST_NO = #{custId}
 		</if>
 		<if test='orderPhnno != null and orderPhnno != ""'>
-		AND    O.ORD_PHNNO = #{orderPhnno}
+		   AND O.ORD_PHNNO = #{orderPhnno}
 		</if>
 		<if test='goodsCd != null and goodsCd != ""'>
-		AND    G1.GOODS_CD = #{goodsCd}
+		   AND G1.GOODS_CD = #{goodsCd}
 		</if>
 		<if test='sizeCd != null and sizeCd != ""'>
-		AND    ODI.OPT_CD2 = #{sizeCd}
+		   AND ODI.OPT_CD2 = #{sizeCd}
 		</if>
 		<if test='goodsNm != null and goodsNm != ""'>
-		AND    G1.GOODS_NM = #{goodsNm}
+		   AND G1.GOODS_NM = #{goodsNm}
 		</if>
 		<if test='payMeans != null and payMeans != ""'>
-		AND    P.PAY_MEANS = #{payMeans}
+		   AND P.PAY_MEANS = #{payMeans}
 		</if>
 		<if test='orderNm != null and orderNm != ""'>
-		AND    O.ORD_NM = #{orderNm}
+		   AND O.ORD_NM = #{orderNm}
 		</if>
 		<if test='custId != null and custId != ""'>
-		AND    O.CUST_NO = #{custId}
+		   AND O.CUST_NO = #{custId}
 		</if>
 		<if test='orderPhnno != null and orderPhnno != ""'>
-		AND    O.ORD_PHNNO = #{orderPhnno}
+		   AND O.ORD_PHNNO = #{orderPhnno}
 		</if>
 		<if test='goodsCd != null and goodsCd != ""'>
-		AND    G2.GOODS_CD = #{goodsCd}
+		   AND G2.GOODS_CD = #{goodsCd}
 		</if>
 		<if test='sizeCd != null and sizeCd != ""'>
-		AND    ODI.OPT_CD2 = #{sizeCd}
+		   AND ODI.OPT_CD2 = #{sizeCd}
 		</if>
 		<if test='goodsNm != null and goodsNm != ""'>
-		AND    G2.GOODS_NM = #{goodsNm}
+		   AND G2.GOODS_NM = #{goodsNm}
 		</if>
 		<if test='recipNm != null and recipNm != ""'>
-		AND    DA.RECIP_NM = #{recipNm}
+		   AND DA.RECIP_NM = #{recipNm}
 		</if>
 		<if test='invoiceNo != null and invoiceNo != ""'>
-		AND    OD.INVOICE_NO = #{invoiceNo}
+		   AND OD.INVOICE_NO = #{invoiceNo}
 		</if>
 		<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "Y"'>
-		AND    OD.INVOICE_SEND_YN = 'Y'
+		   AND OD.INVOICE_SEND_YN = 'Y'
 		</if>
 		<if test='wdInvoiceSendYn != null and wdInvoiceSendYn == "N"'>
-		AND    OD.INVOICE_SEND_YN = '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')
+		   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')
+		   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')
+		   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
+		   AND OD.ORD_NO IN
 			<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
 				#{item}
 			</foreach>
@@ -217,9 +216,15 @@
 										THEN '주문'
 									ELSE '교환'
 							   END   EXCH_GB_NM
+							 , DA.RECIP_NM
+							 , DA.RECIP_PHNNO
+							 , CONCAT(DA.RECIP_BASE_ADDR, ' ', DA.RECIP_DTL_ADDR) AS RECIP_ADDR 
+							 , DA.DELV_MEMO
+							 , OD.DSTRBT_NOTE
 						  FROM TB_ORDER O
 						 INNER JOIN TB_ORDER_DETAIL OD
 							ON O.ORD_NO = OD.ORD_NO
+						   AND OD.ORD_DTL_STAT <![CDATA[<>]]> 'G013_97'			-- 교환철회 상품 제외
 						 INNER JOIN TB_GOODS G1
 							ON OD.GOODS_CD = G1.GOODS_CD
 						 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
@@ -236,19 +241,18 @@
 						   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
+		<if test="(chgStat != null and chgStat != '') or (chgGb != null and chgGb != '')">
+						  LEFT OUTER JOIN (SELECT OCD.ORD_DTL_NO
+												, OC.CHG_GB
 												, 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 OC.WD_INVOICE_NO, OC.WD_INVOICE_SEND_YN, OC.SHIP_COMP_CD, OCD.ORD_DTL_NO, OCD.CHG_QTY, OCD.CHG_STAT
+											GROUP BY OCD.ORD_DTL_NO, OC.CHG_GB, OCD.CHG_STAT
 										  ) OCD
 							ON OD.ORD_DTL_NO = OCD.ORD_DTL_NO
+		</if>
 						 WHERE 1=1
 		<if test='siteCd != null and siteCd != ""'>
 						   AND O.SITE_CD = #{siteCd}
@@ -282,10 +286,8 @@
 		<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 test="chgGb != null and chgGb != ''">
+						   AND OCD.CHG_GB = #{chgGb}
 		</if>
 		<if test='search != null and search == "searchOrdNo"'>
 			<if test="condition != null and condition != ''">
@@ -396,7 +398,7 @@
 			 , FN_GET_CODE_NM('G011', O.MALL_GB)          AS MALL_GB_NM
 			 , O.FRONT_GB
 			 , CASE WHEN O.FRONT_GB = 'P'
-						THEN 'PC'
+				    THEN 'PC'
 					ELSE 'MOBILE'
 			   END                                           FRONT_GB_NM
 			 , OD.EXTMALL_ID
@@ -412,7 +414,7 @@
 			 , O.ORD_TELNO
 			 , C.CUST_GB
 			 , CASE WHEN C.CUST_GB IS NULL
-						THEN '비회원'
+				    THEN '비회원'
 					ELSE FN_GET_CODE_NM('G100', C.CUST_GB)
 			   END                                           CUST_GB_NM
 			 , C.MANAGED_RSN
@@ -484,6 +486,18 @@
 						THEN 0
 					ELSE OCD.ORD_REQ_CHG_QTY * ODI.ITEM_QTY
 			   END                                        ORD_REQ_CHG_QTY
+			 , CASE WHEN OCD.CANCEL_REQUEST_QTY IS NULL
+						THEN 0
+					ELSE OCD.CANCEL_REQUEST_QTY * ODI.ITEM_QTY
+			   END                                        CANCEL_REQUEST_QTY
+			 , CASE WHEN OCD.EXCHANGE_REQUEST_QTY IS NULL
+						THEN 0
+					ELSE OCD.EXCHANGE_REQUEST_QTY * ODI.ITEM_QTY
+			   END                                        EXCHANGE_REQUEST_QTY
+			 , CASE WHEN OCD.RETURN_REQUEST_QTY IS NULL
+						THEN 0
+					ELSE OCD.RETURN_REQUEST_QTY * ODI.ITEM_QTY
+			   END                                        RETURN_REQUEST_QTY
 			 , ODI.OPT_ADD_PRICE
 			 , ODI.CPN1_DC_AMT
 			 , ODI.GOODS_CPN_DC_AMT
@@ -514,6 +528,7 @@
 		  FROM TB_ORDER O
 		 INNER JOIN TB_ORDER_DETAIL OD
 		    ON O.ORD_NO = OD.ORD_NO
+		   AND OD.ORD_DTL_STAT <![CDATA[<>]]> 'G013_97'			-- 교환철회 상품 제외
 		 INNER JOIN TB_GOODS G1
 		    ON OD.GOODS_CD = G1.GOODS_CD
 		 INNER JOIN TB_ORDER_DETAIL_ITEM ODI
@@ -557,6 +572,9 @@
 		    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
+		  						, SUM(IF(OCD.CHG_STAT = 'G685_20', OCD.CHG_QTY, 0)) AS CANCEL_REQUEST_QTY
+								, SUM(IF(OCD.CHG_STAT = 'G685_30', OCD.CHG_QTY, 0)) AS EXCHANGE_REQUEST_QTY
+								, SUM(IF(OCD.CHG_STAT = 'G685_40', OCD.CHG_QTY, 0)) AS RETURN_REQUEST_QTY
 							 FROM TB_ORDER_CHANGE_DETAIL OCD
 							INNER JOIN TB_ORDER_DETAIL OD
 							   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
@@ -633,6 +651,7 @@
 				    ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
 				 WHERE 1 = 1
 				   AND OD.ORD_NO = #{ordNo}
+				   AND OD.ORD_DTL_STAT <![CDATA[<>]]> 'G013_97'			-- 교환철회 상품 제외
 			   ) Z
 		 ORDER BY Z.DELV_ADDR_SQ
 	</select>
@@ -659,6 +678,10 @@
 		 WHERE 1 = 1
 		   AND P.ORD_NO = #{ordNo}
 		   AND P.PAY_STAT = 'G016_30'
+		   AND NOT EXISTS (SELECT 1
+							 FROM TB_ORDER_CHANGE_DETAIL OCD
+							WHERE P.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+							  AND OCD.CHG_STAT = 'G685_31')
 		 ORDER BY P.REG_DT DESC
 	</select>
 
@@ -676,6 +699,10 @@
 				  FROM TB_DELIVERY_FEE DF
 				 WHERE 1 = 1
 				   AND DF.ORD_NO = #{ordNo}
+				   AND NOT EXISTS (SELECT 1
+									 FROM TB_ORDER_CHANGE_DETAIL OCD
+									WHERE DF.ORD_CHG_SQ = OCD.ORD_CHG_SQ
+									  AND OCD.CHG_STAT = 'G685_31')
 		  ) Z
 		 GROUP BY Z.DELV_FEE_GB
 				, Z.DELV_FEE_GB_NM
@@ -1561,13 +1588,418 @@
 	<update id="updateOrderChange" parameterType="Order">
 		/* order.updateOrderChange : 반품/교환 > 회수지 정보 수정 */
 		UPDATE TB_ORDER_CHANGE
-		   SET CHGER_ZIPCODE   = #{chgerZipCode}
+		   SET CHGER_ZIPCODE   = #{chgerZipcode}
 			 , CHGER_BASE_ADDR = #{chgerBaseAddr}
 			 , CHGER_DTL_ADDR  = #{chgerDtlAddr}
 			 , UPD_NO          = #{updNo}
 			 , UPD_DT          = NOW()
 		 WHERE ORD_CHG_SQ = #{ordChgSq}
 	</update>
+	
+	
+	
+	<!-- 장바구니 상품 목록 조회 (업체별 배송단위) -->
+	<select id="getCartGoodsList" parameterType="Order" resultType="Order">
+		/* TsfOrder.getCartGoodsList */
+		SELECT CA.CART_SQ
+			 , CD.CART_DTL_SQ
+			 , BR.BRAND_ENM
+			 , G.GOODS_NM
+			 , CA.GOODS_CD
+			 , CD.ITEM_CD
+			 , OP.OPT_CD
+			 , OP.OPT_CD1
+			 , OP.OPT_CD2
+			 , CA.GOODS_QTY
+			 , G.GOODS_TYPE
+			 , G.LIST_PRICE
+			 , G.CURR_PRICE
+			 , G.GOODS_GB
+			 , G.PRE_PPNT_USABLE_YN
+			 , G.PRE_MPNT_USABLE_YN
+			 , G.MIN_ORD_AMT
+			 , G.MAX_ORD_QTY
+			 , G.DAY_MAX_ORD_QTY
+			 , G.GIFT_PACK_YN
+			 , G.NEW_CUST_ORD_YN
+			 , DFP.SUPPLY_COMP_CD
+			 , CASE WHEN G.SELF_GOODS_YN = 'Y' THEN 'WMS'
+					ELSE DFP.DELV_FEE_CD END AS DELV_FEE_CD
+			 , GRS.DELV_RES_DT
+			 , DFP.MIN_ORD_AMT
+			 , DFP.DELV_FEE
+		  FROM TB_CART CA
+		 INNER JOIN TB_CART_DETAIL CD
+			ON CA.CART_SQ = CD.CART_SQ
+		 INNER JOIN TB_GOODS G
+			ON CA.GOODS_CD = G.GOODS_CD
+		 INNER JOIN TB_OPTION OP
+			ON CD.ITEM_CD = OP.GOODS_CD
+		   AND CD.OPT_CD1 = OP.OPT_CD1
+		   AND CD.OPT_CD2 = OP.OPT_CD2
+		 INNER JOIN TB_DELV_FEE_POLICY DFP
+			ON G.DELV_FEE_CD = DFP.DELV_FEE_CD
+		 INNER JOIN TB_BRAND BR
+			ON G.BRAND_CD = BR.BRAND_CD
+		  LEFT OUTER JOIN TB_GOODS_RES_SELL GRS
+			ON CA.GOODS_CD = GRS.GOODS_CD
+		 WHERE 1 = 1
+		   AND G.GOODS_STAT = 'G008_90'
+		<if test="custNo == 0">
+		   AND CA.CUST_NO = 0
+		   AND CA.JSESSION_ID = #{jsessionId}
+		</if>
+		<if test="custNo != 0">
+		   AND CA.CUST_NO = #{custNo}
+		</if>
+		<if test="cartSqArr != null and cartSqArr ==''">
+		   AND    CA.CART_SQ IN
+			<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+		 ORDER BY DFP.SUPPLY_COMP_CD
+				, DFP.DELV_FEE_CD
+				, CD.CART_SQ
+				, CD.CART_DTL_SQ
+	</select>
+	
+	<!-- 고객정보 조회 -->
+	<select id="getCustemerInfo" parameterType="Order" resultType="Order">
+		/* TsfOrder.getCustemerInfo */
+		SELECT CU.CUST_NM
+		     , CU.EMAIL
+		     , CU.CELL_PHNNO
+		  FROM TB_CUSTOMER CU
+		 WHERE 1=1
+		   AND CU.CUST_NO = #{custNo}
+	</select>
+	
+	<!-- 배송지정보 조회 -->
+	<select id="getDeliveryAddrInfo" parameterType="Order" resultType="Order">
+		/* TsfOrder.getDeliveryAddrInfo */
+		SELECT CDA.DELV_ADDR_NM
+		     , CDA.RECIP_ZIPCODE
+		     , CDA.RECIP_BASE_ADDR
+		     , CDA.RECIP_DTL_ADDR
+		     , CDA.RECIP_PHNNO
+		     , CDA.DELV_MEMO
+		  FROM TB_CUST_DELIVERY_ADDR CDA
+		 WHERE 1=1
+		   AND CDA.CUST_NO = #{custNo}
+		   AND CDA.DEL_YN = 'N'
+		   AND CDA.DEFAULT_YN = 'Y'
+		 LIMIT 1
+	</select>
+	
+	<!-- 포인트정보 조회 -->
+	<select id="getCustPointInfo" parameterType="Order" resultType="int">
+		/* TsfOrder.getCustPointInfo */
+		SELECT IFNULL(SUM(CP.RM_PNT_AMT), 0) AS RM_PNT_AMT
+		  FROM TB_CUST_POINT CP
+		 WHERE 1=1
+		   AND CP.CUST_NO = #{custNo}
+		   AND CP.EXP_BE_DT <![CDATA[<]]> CURRENT_TIMESTAMP
+		   AND CP.EXP_CMP_DT > CURRENT_TIMESTAMP
+	</select>
+	
+	<!-- 상품권정보 조회 -->
+	<select id="getGiftcardInfo" parameterType="Order" resultType="int">
+		/* TsfOrder.getGiftcardInfo */
+		SELECT IFNULL(SUM(CG.RM_GFCD_AMT)) AS RM_GFCD_AMT
+		  FROM TB_CUST_GIFTCARD CG
+		 WHERE 1=1
+		   AND CG.CUST_NO = #{custNo}
+		   AND CG.USE_ST_DATE <![CDATA[<]]> CURRENT_TIMESTAMP
+		   AND CG.USE_EXP_DATE > CURRENT_TIMESTAMP
+	</select>
+	
+	<!-- 총알배송 가능지역 조회 -->
+	<select id="getDailyDeliveryZoneInfo" parameterType="Order" resultType="int">
+		/* TsfOrder.getDailyDeliveryZoneInfo */
+		SELECT COUNT(1)
+		  FROM TB_DAILY_DELIVERY_ZONE DC
+	 	 WHERE 1=1
+		   AND ZIP_NO = #{zipNo}
+	</select>
+	
+	<!-- 즉시할인 적용 상품 조회 -->
+	<select id="getCpn1ApplyGoodsList" parameterType="Order" resultType="Order">
+		/* TsfOrder.getCpn1ApplyGoodsList */
+		WITH GOODS_DATA AS (
+			SELECT CA.GOODS_CD
+			     , G.SUPPLY_COMP_CD
+			     , G.BRAND_CD
+			     , CA.GOODS_QTY 
+			     , G.CURR_PRICE
+			     , OP.ADD_PRICE 
+			     , G.GOODS_TYPE
+			FROM   TB_CART CA
+			INNER  JOIN TB_CART_DETAIL CD
+			ON     CA.CART_SQ = CD.CART_SQ
+			INNER  JOIN TB_GOODS G
+			ON     CA.GOODS_CD = G.GOODS_CD
+			LEFT   OUTER JOIN TB_OPTION OP
+			ON     G.GOODS_CD = OP.GOODS_CD
+			AND    CD.OPT_CD = OP.OPT_CD
+			WHERE  1=1
+			AND    G.GOODS_STAT = 'G008_90' -- 승인완료
+			<if test="cartSqArr != null and cartSqArr ==''">
+			AND    CA.CART_SQ IN 
+				<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
+		)
+		SELECT Z.GOODS_CD
+		     , Z.CURR_PRICE
+		     , Z.ADD_PRICE
+		     , Z.GOODS_QTY
+		     , CP.CPN_ID
+		     , CP.CPN_NM
+		     , CP.DC_WAY
+		     , CP.DC_PVAL
+		     , CP.DC_MVAL
+		     , CP.DC_AVAL
+		     , CP.MAX_DC_AMT
+		     , CP.BUY_LIMIT_AMT 
+		     , CASE WHEN CP.DC_WAY = 'G240_11' 
+		            THEN (Z.CURR_PRICE * CP.DC_PVAL) / 100 
+		            ELSE CP.DC_PVAL
+		            END  PC_CURR_PRICE
+		FROM   TB_COUPON CP
+		INNER  JOIN TB_COUPON_CUST_GBN CGB
+		ON     CP.CPN_ID = CGB.CPN_ID
+		AND    CGB.USABLE_CUST_GB IN ('G100_10')
+		INNER  JOIN TB_COUPON_CUST_GRADE CGR
+		ON     CP.CPN_ID = CGR.CPN_ID
+		AND    CGR.USABLE_CUST_GRADE IN ('G110_40', 'G110_50')
+		INNER  JOIN (
+			SELECT CR.CPN_ID
+			     , GD.GOODS_CD
+			     , GD.CURR_PRICE
+			     , GD.ADD_PRICE
+			     , GD.GOODS_QTY
+			     , GD.GOODS_TYPE
+			FROM   TB_COUPON_REFVAL CR
+			INNER  JOIN GOODS_DATA GD
+			ON     CR.REF_VAL = GD.GOODS_CD
+			WHERE  1=1
+			AND    CR.CPN_TARGET = 'G260_10' -- 상품
+			AND    CR.DEL_YN = 'N'
+			UNION
+			SELECT CR.CPN_ID
+			     , GD.GOODS_CD
+			     , GD.CURR_PRICE
+			     , GD.ADD_PRICE
+			     , GD.GOODS_QTY
+			     , GD.GOODS_TYPE
+			FROM   (
+				SELECT C4.LEAF_CATE_NO
+				     , CASE WHEN X = 1 THEN 'CATE1_NO' 
+				            WHEN X = 2 THEN 'CATE2_NO'
+				            WHEN X = 3 THEN 'CATE3_NO'
+				            WHEN X = 4 THEN 'CATE4_NO'
+				            ELSE 'CATE5_NO'
+				            END  CATE_LVL
+				     , CASE WHEN X = 1 THEN CATE1_NO 
+				            WHEN X = 2 THEN CATE2_NO
+				            WHEN X = 3 THEN CATE3_NO
+				            WHEN X = 4 THEN CATE4_NO
+				            ELSE CATE5_NO
+				            END  CATE_NO
+				FROM   TB_CATE_4SRCH C4
+				LEFT   OUTER JOIN (
+					SELECT 1 AS X
+					UNION  ALL 
+					SELECT 2 AS X
+					UNION  ALL 
+					SELECT 3 AS X
+					UNION  ALL 
+					SELECT 4 AS X
+					UNION  ALL 
+					SELECT 5 AS X
+				) B
+				ON     1=1
+				WHERE  1=1
+				AND    C4.SITE_CD = 'G000_10'
+				AND    C4.CATE_TYPE = 'G031_10'
+				ORDER  BY LEAF_CATE_NO 
+				     , CATE_LVL
+			) C4SRCH
+			INNER  JOIN TB_COUPON_REFVAL CR
+			ON     C4SRCH.CATE_NO = CR.REF_VAL
+			INNER  JOIN TB_CATE_GOODS CG
+			ON     C4SRCH.LEAF_CATE_NO = CG.CATE_NO
+			INNER  JOIN GOODS_DATA GD
+			ON     CG.GOODS_CD = GD.GOODS_CD
+			WHERE  C4SRCH.CATE_NO IS NOT NULL
+			AND    CR.CPN_TARGET = 'G260_11' -- 카테고리
+			AND    CR.DEL_YN = 'N'
+			UNION
+			SELECT CR1.CPN_ID
+			     , GD.GOODS_CD
+			     , GD.CURR_PRICE
+			     , GD.ADD_PRICE
+			     , GD.GOODS_QTY
+			     , GD.GOODS_TYPE
+			FROM   GOODS_DATA GD
+			INNER  JOIN TB_COUPON_REFVAL CR1 
+			ON     GD.SUPPLY_COMP_CD = CR1.REF_VAL
+			AND    CR1.CPN_TARGET = 'G260_12' -- 브랜드
+			AND    CR1.DEL_YN = 'N'
+			INNER  JOIN TB_COUPON_REFVAL CR2 
+			ON     GD.SUPPLY_COMP_CD = CR2.REF_VAL
+			AND    CR2.CPN_TARGET = 'G260_13' -- 공급업체
+			AND    CR2.DEL_YN = 'N'
+		) Z
+		ON     Z.CPN_ID = CP.CPN_ID
+		WHERE  1=1
+		AND    CP.SITE_CD = '10'
+		AND    CP.CPN_TYPE = 'G230_10' -- 즉시할인
+		AND    CP.DOWN_STDT <![CDATA[<]]> CURRENT_TIMESTAMP 
+		AND    CP.DOWN_EDDT > CURRENT_TIMESTAMP
+	</select>
+	
+	<!-- 상품쿠폰, 장바구니쿠폰 적용 상품 조회 -->
+	<select id="getGoodsCartCpnApplyGoodsList" parameterType="Order" resultType="Order">
+		/* TsfOrder.getGoodsCartCpnApplyGoodsList */
+		WITH GOODS_DATA AS (
+			SELECT CA.GOODS_CD
+			     , G.SUPPLY_COMP_CD
+			     , G.BRAND_CD
+			     , CA.GOODS_QTY 
+			     , G.CURR_PRICE
+			     , OP.ADD_PRICE 
+			     , G.GOODS_TYPE
+			FROM   TB_CART CA
+			INNER  JOIN TB_CART_DETAIL CD
+			ON     CA.CART_SQ = CD.CART_SQ
+			INNER  JOIN TB_GOODS G
+			ON     CA.GOODS_CD = G.GOODS_CD
+			LEFT   OUTER JOIN TB_OPTION OP
+			ON     G.GOODS_CD = OP.GOODS_CD
+			AND    CD.OPT_CD = OP.OPT_CD
+			WHERE  1=1
+			AND    G.GOODS_STAT = 'G008_90' -- 승인완료
+			<if test="cartSqArr != null and cartSqArr ==''">
+			AND    CA.CART_SQ IN 
+				<foreach collection="cartSqArr" item="item" index="index"  open="(" close=")" separator=",">
+					#{item}
+				</foreach>
+			</if>
+		)
+		SELECT Z.GOODS_CD
+		     , Z.CURR_PRICE
+		     , Z.ADD_PRICE
+		     , Z.GOODS_QTY
+		     , CP.CPN_ID
+		     , CP.CPN_NM
+		     , CP.DC_WAY
+		     , CP.DC_PVAL
+		     , CP.DC_MVAL
+		     , CP.DC_AVAL
+		     , CP.MAX_DC_AMT
+		     , CP.BUY_LIMIT_AMT 
+		     , CASE WHEN CP.DC_WAY = 'G240_11' 
+		            THEN (Z.CURR_PRICE * CP.DC_PVAL) / 100 
+		            ELSE CP.DC_PVAL
+		            END  PC_CURR_PRICE
+		FROM   TB_COUPON CP
+		INNER  JOIN TB_COUPON_CUST_GBN CGB
+		ON     CP.CPN_ID = CGB.CPN_ID
+		AND    CGB.USABLE_CUST_GB IN ('G100_10')
+		INNER  JOIN TB_COUPON_CUST_GRADE CGR
+		ON     CP.CPN_ID = CGR.CPN_ID
+		AND    CGR.USABLE_CUST_GRADE IN ('G110_40', 'G110_50')
+		INNER  JOIN (
+			SELECT CR.CPN_ID
+			     , GD.GOODS_CD
+			     , GD.CURR_PRICE
+			     , GD.ADD_PRICE
+			     , GD.GOODS_QTY
+			     , GD.GOODS_TYPE
+			FROM   TB_COUPON_REFVAL CR
+			INNER  JOIN GOODS_DATA GD
+			ON     CR.REF_VAL = GD.GOODS_CD
+			WHERE  1=1
+			AND    CR.CPN_TARGET = 'G260_10' -- 상품
+			AND    CR.DEL_YN = 'N'
+			UNION
+			SELECT CR.CPN_ID
+			     , GD.GOODS_CD
+			     , GD.CURR_PRICE
+			     , GD.ADD_PRICE
+			     , GD.GOODS_QTY
+			     , GD.GOODS_TYPE
+			FROM   (
+				SELECT C4.LEAF_CATE_NO
+				     , CASE WHEN X = 1 THEN 'CATE1_NO' 
+				            WHEN X = 2 THEN 'CATE2_NO'
+				            WHEN X = 3 THEN 'CATE3_NO'
+				            WHEN X = 4 THEN 'CATE4_NO'
+				            ELSE 'CATE5_NO'
+				            END  CATE_LVL
+				     , CASE WHEN X = 1 THEN CATE1_NO 
+				            WHEN X = 2 THEN CATE2_NO
+				            WHEN X = 3 THEN CATE3_NO
+				            WHEN X = 4 THEN CATE4_NO
+				            ELSE CATE5_NO
+				            END  CATE_NO
+				FROM   TB_CATE_4SRCH C4
+				LEFT   OUTER JOIN (
+					SELECT 1 AS X
+					UNION  ALL 
+					SELECT 2 AS X
+					UNION  ALL 
+					SELECT 3 AS X
+					UNION  ALL 
+					SELECT 4 AS X
+					UNION  ALL 
+					SELECT 5 AS X
+				) B
+				ON     1=1
+				WHERE  1=1
+				AND    C4.SITE_CD = 'G000_10'
+				AND    C4.CATE_TYPE = 'G031_10'
+				ORDER  BY LEAF_CATE_NO 
+				     , CATE_LVL
+			) C4SRCH
+			INNER  JOIN TB_COUPON_REFVAL CR
+			ON     C4SRCH.CATE_NO = CR.REF_VAL
+			INNER  JOIN TB_CATE_GOODS CG
+			ON     C4SRCH.LEAF_CATE_NO = CG.CATE_NO
+			INNER  JOIN GOODS_DATA GD
+			ON     CG.GOODS_CD = GD.GOODS_CD
+			WHERE  C4SRCH.CATE_NO IS NOT NULL
+			AND    CR.CPN_TARGET = 'G260_11' -- 카테고리
+			AND    CR.DEL_YN = 'N'
+			UNION
+			SELECT CR1.CPN_ID
+			     , GD.GOODS_CD
+			     , GD.CURR_PRICE
+			     , GD.ADD_PRICE
+			     , GD.GOODS_QTY
+			     , GD.GOODS_TYPE
+			FROM   GOODS_DATA GD
+			INNER  JOIN TB_COUPON_REFVAL CR1 
+			ON     GD.SUPPLY_COMP_CD = CR1.REF_VAL
+			AND    CR1.CPN_TARGET = 'G260_12' -- 브랜드
+			AND    CR1.DEL_YN = 'N'
+			INNER  JOIN TB_COUPON_REFVAL CR2 
+			ON     GD.SUPPLY_COMP_CD = CR2.REF_VAL
+			AND    CR2.CPN_TARGET = 'G260_13' -- 공급업체
+			AND    CR2.DEL_YN = 'N'
+		) Z
+		ON     Z.CPN_ID = CP.CPN_ID
+		INNER  JOIN TB_CUST_COUPON CCP
+		ON     CP.CPN_ID = CCP.CPN_ID
+		WHERE  1=1
+		AND    CP.SITE_CD = '10'
+		AND    CP.CPN_TYPE IN ('G230_11', 'G230_20') -- 상품쿠폰, 장바구니쿠폰
+		AND    CP.DOWN_STDT <![CDATA[<]]> CURRENT_TIMESTAMP 
+		AND    CP.DOWN_EDDT > CURRENT_TIMESTAMP
+	</select>
 
 </mapper>
 

+ 170 - 4
src/main/java/com/style24/persistence/mybatis/shop/TscOrderChange.xml

@@ -152,7 +152,7 @@
 	
 	<!-- 주문변경신청목록 조회 (취소, 반품, 교환) -->
 	<select id="getOrderChangeDetailList" parameterType="Order" resultType="Order">
-		/* order.getOrderChangeList */
+		/* order.getOrderChangeDetailList */
 		SELECT OCD.ORD_CHG_SQ
 			 , OCD.ORD_DTL_NO
 			 , OC.CHG_GB
@@ -181,6 +181,7 @@
 			 , OC.CHGER_DTL_ADDR
 			 , OC.WD_INVOICE_SEND_YN
 			 , OC.WD_INVOICE_NO
+			 , OC.WD_GB
 		  FROM TB_ORDER_CHANGE_DETAIL OCD
 		 INNER JOIN TB_ORDER_CHANGE OC
 		    ON OC.ORD_CHG_SQ = OCD.ORD_CHG_SQ
@@ -877,7 +878,7 @@
 	<update id="updateOrderChangeDtlCancel" parameterType="Order">
 		/* OrderChange.updateOrderChangeDtlCancel */
 		UPDATE TB_ORDER_CHANGE_DETAIL
-		   SET CHG_STAT = #{ordDtlStat}
+		   SET CHG_STAT = #{chgStat}
 			 , DEL_YN   = #{delYn}
 			 , UPD_NO   = #{updNo}
 			 , UPD_DT   = NOW()
@@ -1611,7 +1612,7 @@
 	<select id="getAddDeliveryFeePayment" parameterType="OrderChange" resultType="Order">
 		/* OrderChange.getAddDeliveryFeePayment */
 		SELECT OC.ORD_CHG_SQ
-			 , SUM(P.PAY_AMT) AS PAY_AMT
+			 , P.PAY_AMT
 		  FROM TB_ORDER_CHANGE OC
 		 INNER JOIN TB_DELIVERY_FEE DF
 		    ON DF.ORD_CHG_SQ = OC.ORD_CHG_SQ
@@ -1620,9 +1621,174 @@
 		    ON P.ORD_CHG_SQ = OC.ORD_CHG_SQ
 		 WHERE OC.ORD_CHG_SQ = #{ordChgSq}
 		   AND OC.ADD_PAY_COST > 0
-		 GROUP BY OC.ORD_CHG_SQ
 	</select>
+	
+	<!-- 추가배송비 결제 취소 정보 생성 -->
+	<insert id="createAddDeliveryFeeCancelPayment" parameterType="Order" keyProperty="paySq">
+		/* OrderChange.createAddDeliveryFeeCancelPayment */
+		INSERT INTO TB_PAYMENT (
+			ORD_NO
+		  , PAY_DT
+		  , PAY_MEANS
+		  , PAY_AMT
+		  , PG_CPN_AMT
+		  , NPAY_PNT_AMT
+		  , PAY_GB
+		  , PAY_STAT
+		  , PG_GB
+		  , PG_TID
+		  , PG_TRADE_NO
+		  , PG_SHOP_ID
+		  , CARD_TYPE
+		  , CARD_KIND
+		  , CARD_BANK
+		  , CARD_NM
+		  , CARD_MIPS
+		  , CARD_PCABLE_YN
+		  , VA_NO
+		  , VA_NM
+		  , VA_BANK
+		  , VA_DEADLINE
+		  , TELECOM
+		  , ESCROW_YN
+		  , ORD_CHG_SQ
+		  , REG_NO
+		  , REG_DT
+		  , UPD_NO
+		  , UPD_DT
+		) 
+		SELECT ORD_NO
+		     , NULL
+		     , PAY_MEANS
+		     , #{payAmt}
+		     , #{pgCpnAmt}
+		     , #{npayPntAmt}
+			 , #{payGb}
+			 , #{payStat}
+		     , PG_GB
+		     , NULL
+		     , NULL
+		     , NULL
+		     , CARD_TYPE
+		     , CARD_KIND
+		     , CARD_BANK
+		     , CARD_NM
+		     , CARD_MIPS
+		     , CARD_PCABLE_YN
+		     , VA_NO
+		     , VA_NM
+		     , VA_BANK
+		     , VA_DEADLINE
+		     , TELECOM
+		     , ESCROW_YN
+		     , #{ordChgSq}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		  FROM TB_PAYMENT
+		 WHERE PAY_SQ = #{paySq}
+	</insert>
+
+	<!-- 교환철회 주문상세 상태코드 변경 -->
+	<update id="updateOrderDetailForExchangeCancel" parameterType="Order">
+		/* OrderChange.updateOrderDetailForExchangeCancel */
+		UPDATE TB_ORDER_DETAIL OD
+		 INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		    ON OD.ORD_DTL_NO = OCD.CHG_ORD_DTL_NO
+		   SET OD.ORD_DTL_STAT = #{ordDtlStat}
+		     , OD.UPD_NO = #{updNo}
+		     , OD.UPD_DT = NOW()
+		 WHERE OCD.ORD_CHG_SQ = #{ordChgSq}
+		   AND OD.ORD_NO = #{ordNo}
+	</update>
+
+	<!-- 교환철회 주문단품상세 상태코드 변경 -->
+	<update id="updateOrderDetailItemForExchangeCancel" parameterType="Order">
+		/* OrderChange.updateOrderDetailItemForExchangeCancel */
+		UPDATE TB_ORDER_DETAIL_ITEM ODI
+			INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
+			ON ODI.ORD_DTL_NO = OCD.CHG_ORD_DTL_NO
+		   SET ODI.ORD_DTL_STAT = #{ordDtlStat}
+			 , ODI.UPD_NO = #{updNo}
+			 , ODI.UPD_DT = NOW()
+		 WHERE OCD.ORD_CHG_SQ = #{ordChgSq}
+		   AND ODI.ORD_NO = #{ordNo}
+	</update>
 
+	<!-- 교환철회 주문상세단품정보 이력 생성 -->
+	<insert id="createOrderDetailItemHstForExchangeCancel" parameterType="Order">
+		/* order.createOrderDetailItemHstForExchangeCancel */
+		INSERT INTO TB_ORDER_DETAIL_ITEM_HST (
+			ORD_DTL_ITEM_SQ
+		  , ORD_DTL_NO
+		  , ORD_NO
+		  , ORD_DTL_STAT
+		  , ITEM_CD
+		  , OPT_CD
+		  , OPT_CD1
+		  , OPT_CD2
+		  , SKU_MODEL_NO
+		  , PRODUCT_NO
+		  , PRODUCT_CODE
+		  , ITEM_QTY
+		  , ITEM_PRICE
+		  , OPT_ADD_PRICE
+		  , DISP_ORD
+		  , ORD_AMT
+		  , CNCL_RTN_AMT
+		  , CPN1_DC_AMT
+		  , TMTB1_DC_AMT
+		  , TMTB2_DC_AMT
+		  , GOODS_CPN_DC_AMT
+		  , CART_CPN_DC_AMT
+		  , PNT_DC_AMT
+		  , PRE_PNT_DC_AMT
+		  , SAVE_PNT_AMT
+		  , REAL_ORD_AMT
+		  , GFCD_USE_AMT
+		  , REG_NO
+		  , REG_DT
+		  , UPD_NO
+		  , UPD_DT
+		)
+		SELECT ODI.ORD_DTL_ITEM_SQ
+			 , ODI.ORD_DTL_NO
+			 , ODI.ORD_NO
+			 , ODI.ORD_DTL_STAT
+			 , ODI.ITEM_CD
+			 , ODI.OPT_CD
+			 , ODI.OPT_CD1
+			 , ODI.OPT_CD2
+			 , ODI.SKU_MODEL_NO
+			 , ODI.PRODUCT_NO
+			 , ODI.PRODUCT_CODE
+			 , ODI.ITEM_QTY
+			 , ODI.ITEM_PRICE
+			 , ODI.OPT_ADD_PRICE
+			 , ODI.DISP_ORD
+			 , ODI.ORD_AMT
+			 , ODI.CNCL_RTN_AMT
+			 , ODI.CPN1_DC_AMT
+			 , ODI.TMTB1_DC_AMT
+			 , ODI.TMTB2_DC_AMT
+			 , ODI.GOODS_CPN_DC_AMT
+			 , ODI.CART_CPN_DC_AMT
+			 , ODI.PNT_DC_AMT
+			 , ODI.PRE_PNT_DC_AMT
+			 , ODI.SAVE_PNT_AMT
+			 , ODI.REAL_ORD_AMT
+			 , ODI.GFCD_USE_AMT
+			 , ODI.REG_NO
+			 , ODI.REG_DT
+			 , ODI.UPD_NO
+			 , ODI.UPD_DT
+		  FROM TB_ORDER_DETAIL_ITEM ODI
+		 INNER JOIN TB_ORDER_CHANGE_DETAIL OCD
+		    ON ODI.ORD_DTL_NO = OCD.CHG_ORD_DTL_NO
+		 WHERE OCD.ORD_CHG_SQ = #{ordChgSq}
+		   AND ODI.ORD_NO = #{ordNo}
+	</insert>
 </mapper>