Просмотр исходного кода

Merge branch 'develop' into jsshin

jsshin 5 лет назад
Родитель
Сommit
666d128894

+ 0 - 7
pom.xml

@@ -236,13 +236,6 @@
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xalan.jar</systemPath>
 		</dependency>
-		<dependency>
-			<groupId>xbean</groupId>
-			<artifactId>xbean</artifactId>
-			<version>1.0</version>
-			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xbean.jar</systemPath>
-		</dependency>
 		<!-- \\\ WEB-INF lib -->
 	</dependencies>
 	

+ 80 - 0
src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -0,0 +1,80 @@
+package com.style24.admin.biz.service;
+
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.core.biz.service.TscOrderChangeService;
+import com.style24.core.biz.service.TscWmsService;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.OrderChange;
+import com.style24.persistence.domain.WmsDelivery;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 주문 변경 Service
+ *
+ * @author card007
+ * @since 2021. 06. 15
+ */
+@Service
+@Slf4j
+public class TsaOrderChangeService {
+
+	@Autowired
+	private TscMessageByLocale message;
+
+	@Autowired
+	private Environment env;
+
+	@Autowired
+	private TscOrderChangeService coreOrderChangeService;
+	
+	@Autowired
+	private TscWmsService coreWmsService;
+
+	/**
+	 * 반품 TO 교환 처리
+	 * 
+	 * @param orderChange
+	 * @author card007
+	 * @since 2021. 06. 15
+	 */
+	@Transactional("shopTxnManager")
+	public void returnToExchange(OrderChange orderChange) {
+		Integer ordChgSq = orderChange.getOrdChgSq();
+		// 1. 반품 철회 처리
+		GagaMap map = new GagaMap();
+		map.setInt("ordChgSq", ordChgSq);
+		map.setInt("ordNo", orderChange.getOrdNo());
+
+		int userNo = orderChange.getUserNo();
+
+		coreOrderChangeService.rtnReqCancel(map, userNo);
+
+		// 2. WMS 회수지시 여부 체크 후 회시지시대상여부 컬럼 정보 설정
+		orderChange.setWdTargetYn("Y");
+
+		WmsDelivery wmsDelivery = new WmsDelivery();
+		wmsDelivery.setOrderExceptionNo(ordChgSq);
+		Collection<WmsDelivery> list = coreWmsService.getWmsWithdrawRequestInfo(wmsDelivery);
+
+		if (list != null && list.size() > 0) {
+			String ifStat = list.iterator().next().getIfStat();
+			if (!"0".equals(ifStat)) {
+				orderChange.setWdTargetYn("N");
+			}
+		}
+
+		// 3. WMS 반품 정보 삭제 처리
+		
+
+		// 4. 교환 접수 처리
+		coreOrderChangeService.exchReq(orderChange);
+	}
+}

+ 11 - 13
src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java

@@ -1,32 +1,30 @@
 package com.style24.admin.biz.service;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import org.apache.commons.lang3.StringUtils;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.style24.admin.biz.dao.TsaDeliveryDao;
 import com.style24.admin.biz.dao.TsaWithdrawDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.OrderChange;
-import com.style24.persistence.domain.Withdraw;
-import com.style24.persistence.domain.WithdrawExc;
-import com.style24.persistence.domain.WmsWithdraw;
-import com.style24.core.support.env.TscConstants.OrderChangeStat;
-import com.style24.core.support.env.TscConstants;
 import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.support.env.TscConstants.OrderChangeGb;
+import com.style24.core.support.env.TscConstants.OrderChangeStat;
+import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.core.support.util.CryptoUtils;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.OrderChange;
+import com.style24.persistence.domain.Withdraw;
+import com.style24.persistence.domain.WithdrawExc;
+import com.style24.persistence.domain.WmsWithdraw;
 
-import com.style24.core.support.message.TscMessageByLocale;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * 회수관리 Service
@@ -182,9 +180,9 @@ public class TsaWithdrawService {
 		orderChange.setDelvFeeCd(item.getDelvFeeCd());
 		orderChange.setChgGb(item.getChgGb());
 		
-		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo2(orderChange);
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(orderChange);
 		List<Order> returnReqList = (List<Order>)refundPreInfo.get("cnclReqList"); 
-		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt2(returnReqList);
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
 		return result;
 	}
 	

+ 96 - 125
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -1,5 +1,6 @@
 package com.style24.admin.biz.web;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -17,6 +18,7 @@ import org.springframework.web.servlet.ModelAndView;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
 import com.gagaframework.web.rest.server.GagaResponseStatus;
+import com.style24.admin.biz.service.TsaOrderChangeService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
@@ -52,13 +54,16 @@ public class TsaOrderChangeController extends TsaBaseController {
 	private TsaRendererService rendererService;
 	
 	@Autowired
-	private TscOrderService orderService;
-	
+	private TscOrderService coreOrderService;
+
+	@Autowired
+	private TsaOrderChangeService orderChangeService;
+
 	@Autowired
-	private TscOrderChangeService orderChangeService;
+	private TscOrderChangeService coreOrderChangeService;
 	
 	@Autowired
-	private TscOrderRefundService orderRefundService;
+	private TscOrderRefundService coreOrderRefundService;
 	
 	@Autowired
 	private TscKcpService coreKcpService;
@@ -99,9 +104,9 @@ public class TsaOrderChangeController extends TsaBaseController {
 		order.setOrdDtlStatArr(ordDtlStatArr);
 		
 		// 2. 변경신청된 주문상세번호를 체크 후 있으면 해당 취소가능수량값 업데이트 
-		List<Order> cancelRequestTargetList 		= orderChangeService.getCancelRequestTargetList2(order);
-		List<Order> orderChangeDetailList 			= orderChangeService.getOrderChangeDetailList(order);
-		Collection<Order> orderInfoList 			= orderService.getOrderInfoList(order);
+		List<Order> cancelRequestTargetList 		= coreOrderChangeService.getCancelRequestTargetList2(order);
+		List<Order> orderChangeDetailList 			= coreOrderChangeService.getOrderChangeDetailList(order);
+		Collection<Order> orderInfoList 			= coreOrderService.getOrderInfoList(order);
 		
 		// 3. 화면으로 데이타 전송
 		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
@@ -147,7 +152,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.set("ordChgSq"		, cnclReq.getOrdChgSq());
 		
 		// 2.취소요청철회 
-		mav = orderChangeService.cnclReqCancel(mav, userNo);
+		mav = coreOrderChangeService.cnclReqCancel(mav, userNo);
 		
 		return super.ok("성공");
 	}
@@ -176,12 +181,12 @@ public class TsaOrderChangeController extends TsaBaseController {
 		cnclReq.setUserNo(userNo);
 				
 		// 2021.05.14 FRONT 정보 선주문정보조회
-		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo2(cnclReq);
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(cnclReq);
 		List<Order> cnclReqList = (List<Order>) refundPreInfo.get("cnclReqList");
 		
 		// 2. 환불금액계산
 		// 2021.01.19 취소신청정보를 목록 (주문상세번호, 취소/반품수량) 으로 표현
-		GagaMap map = orderRefundService.cnclRtnRefundAmt2(cnclReqList);
+		GagaMap map = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
 		
 		// 3. 주문변경 기본정보 설정
 		map.set("ordNo"						, cnclReq.getOrdNo());						// 주문번호
@@ -222,19 +227,19 @@ public class TsaOrderChangeController extends TsaBaseController {
 			// cnclRtnReqQtyArr		: 변경수량배열
 			
 			cnclReq.setChgGb(TscConstants.OrderChangeGb.CANCEL.value());
-			orderChangeService.cancelRequest(cnclReq);
+			coreOrderChangeService.cancelRequest(cnclReq);
 		}
 		// 2021.06.09 취소접수승인
 		else if ("cnclReqComplete".equals(cnclReq.getReqGbn())) {
-			result = orderChangeService.approveCancelRequest(cnclReq, userNo);
+			result = coreOrderChangeService.approveCancelRequest(cnclReq, userNo);
 		}
 		// 2021.06.09 취소접수철회
 		else if ("cnclReqCancel".equals(cnclReq.getReqGbn())) {
-			orderChangeService.cnclReqCancel(map, userNo);
+			coreOrderChangeService.cnclReqCancel(map, userNo);
 		}
 		// 취소완료
 		else {
-			result = orderChangeService.partialCancelTemp(map, userNo);
+			result = coreOrderChangeService.partialCancel(map, userNo);
 		}
 		
 		// 5. 취소 알림톡 및 메일 발송
@@ -243,7 +248,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		if (ordChgSq > 0) {
 			try {
 				// 취소 알림톡 관련 정보 조회
-				OrderChange orderChange = orderChangeService.getKakaoOrderCancelInfo(ordChgSq);
+				OrderChange orderChange = coreOrderChangeService.getKakaoOrderCancelInfo(ordChgSq);
 
 				// 취소 알림톡 발송
 				if (StringUtils.isNotBlank(orderChange.getOrdPhnno())) {
@@ -251,7 +256,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 				}
 
 				// 취소 안내 메일 정보 조회
-				GagaMap replaceInfo = orderChangeService.getMailOrderCancelReplaceInfo(orderChange);
+				GagaMap replaceInfo = coreOrderChangeService.getMailOrderCancelReplaceInfo(orderChange);
 
 				// 취소 안내 메일 발송
 				if (StringUtils.isNotBlank(replaceInfo.getString("ordEmail"))) {
@@ -285,18 +290,23 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[1] = TscConstants.OrderDetailStat.SHIP_COMPLETE.value();
 		ordDtlStatArr[2] = TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value();
 		order.setOrdDtlStatArr(ordDtlStatArr);
-		
+
 		// 2. 변경신청된 주문상세번호를 체크 후 있으면 해당 취소가능수량값 업데이트 
-		List<Order> cancelRequestTargetList 		= orderChangeService.getCancelRequestTargetList2(order);
-		List<Order> orderChangeDetailList 			= orderChangeService.getOrderChangeDetailList(order);
-		Collection<Order> orderInfoList 			= orderService.getOrderInfoList(order);
+		List<Order> cancelRequestTargetList 		= coreOrderChangeService.getCancelRequestTargetList2(order);
+		List<Order> orderChangeDetailList 			= coreOrderChangeService.getOrderChangeDetailList(order);
+		Collection<Order> orderInfoList 			= coreOrderService.getOrderInfoList(order);
 
 		if (order.getOrdChgSq() > 0) {
-			Collection<Order> exchangeInfoList = orderChangeService.getExchangeInfo(order);
+			Collection<Order> exchangeInfoList = coreOrderChangeService.getExchangeInfo(order);
 			mav.addObject("exchangeInfoList"		, exchangeInfoList);											// 교환정보
 		}
 		
-		String chgStat = cancelRequestTargetList.get(0).getChgStat();
+		String chgStat = "";
+		for (Order tmp : cancelRequestTargetList) {
+			if (StringUtils.isNotBlank(tmp.getChgStat())) {
+				chgStat = tmp.getChgStat();
+			}
+		}
 
 		// 2021.01.26 취소요청 화면, 취소요청정보확인 화면 통합
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G688"));				// 취소사유
@@ -304,8 +314,10 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.addObject("orderInfoList"				, orderInfoList);												// 주문정보
 		mav.addObject("ordNo"						, order.getOrdNo());											// 주문번호
 		mav.addObject("ordChgSq"					, order.getOrdChgSq());											// 주문변경번호
+		mav.addObject("delvFeeCd"					, order.getDelvFeeCd());										// 배송정책코드
+		mav.addObject("delvFeeCdGrp"				, order.getDelvFeeCdGrp());										// 배송정책그룹코드
 		mav.addObject("orderChangeDetailList"		, orderChangeDetailList);										// 변경신청목록 (취소/반품/교환)
-		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));						// 배송정보
+		mav.addObject("orderDelvRtnAddrInfo"		, coreOrderService.getDeliveryAddrList(order));						// 배송정보
 		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));				// 전화번호국번
 		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));				// (휴대전화)번호국번
 		mav.addObject("chgStat"						, chgStat);														// 변경상태
@@ -338,13 +350,13 @@ public class TsaOrderChangeController extends TsaBaseController {
 		rtnReq.setIpAddress(TsaSession.getIpAddress());
 
 		// 2021.05.14 FRONT 정보 선주문정보조회
-		GagaMap refundPreInfo 		= orderChangeService.getRefundPreInfo2(rtnReq);
+		GagaMap refundPreInfo 		= coreOrderChangeService.getRefundPreInfo(rtnReq);
 		List<Order> cnclReqList 	= (List<Order>) refundPreInfo.get("cnclReqList");
 		
 		GagaMap map = new GagaMap();
 		
 		// 3. 환불예상금액계산
-		map = orderRefundService.cnclRtnRefundAmt2(cnclReqList);
+		map = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
 		
 		// 4. 주문변경기본정보설정
 		map.set("ordNo"						, rtnReq.getOrdNo());						// 주문번호
@@ -380,13 +392,13 @@ public class TsaOrderChangeController extends TsaBaseController {
 		map.set("cashAuthNo"				, refundPreInfo.getString("cashAuthNo"));	// 현금영수증 승인번호
 		
 		// 4. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
-		GagaMap result = orderChangeService.returnRequest(map);
+		GagaMap result = coreOrderChangeService.returnRequest(map);
 		int ordChgSq = result.getInt("ordChgSq");
 
 		if (ordChgSq > 0) {
 			try {
 				// 반품 알림톡 관련 정보 조회
-				OrderChange orderChange = orderChangeService.getKakaoOrderReturnInfo(ordChgSq);
+				OrderChange orderChange = coreOrderChangeService.getKakaoOrderReturnInfo(ordChgSq);
 				
 				// 반품 알림톡 발송
 				if (StringUtils.isNotBlank(orderChange.getOrdPhnno())) {
@@ -394,7 +406,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 				}
 
 				// 반품 안내 메일 정보 조회
-				GagaMap replaceInfo = orderChangeService.getMailOrderReturnReplaceInfo(orderChange);
+				GagaMap replaceInfo = coreOrderChangeService.getMailOrderReturnReplaceInfo(orderChange);
 
 				// 반품 안내 메일 발송
 				if (StringUtils.isNotBlank(replaceInfo.getString("ordEmail"))) {
@@ -431,7 +443,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.set("ordChgSq"		, cnclReq.getOrdChgSq());
 		
 		// 2.취소요청철회 
-		mav = orderChangeService.rtnReqCancel(mav, userNo);
+		mav = coreOrderChangeService.rtnReqCancel(mav, userNo);
 		
 		return super.ok("성공");
 	}
@@ -455,11 +467,11 @@ public class TsaOrderChangeController extends TsaBaseController {
 		cnclReq.setRegNo(userNo);
 
 		// 1. 환불 사전 정보 조회
-		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo2(cnclReq);
+		GagaMap refundPreInfo = coreOrderChangeService.getRefundPreInfo(cnclReq);
 		List<Order> cnclReqList = (List<Order>) refundPreInfo.get("cnclReqList");
 		
 		// 2. 환불금액정보 계산 & 조회
-		mav = orderRefundService.cnclRtnRefundAmt2(cnclReqList);
+		mav = coreOrderRefundService.cnclRtnRefundAmt(cnclReqList);
 		
 		return mav;
 	}
@@ -478,7 +490,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 	public GagaMap getRefundAccountInfoList(@RequestBody Order order) {
 		GagaMap mav = new GagaMap();
 
-		Collection<Order> orderRfAccountInfo = orderChangeService.getRefundAccount(order);
+		Collection<Order> orderRfAccountInfo = coreOrderChangeService.getRefundAccount(order);
 		mav.put("orderRfAccountInfo", orderRfAccountInfo);
 
 		return mav;
@@ -499,8 +511,8 @@ public class TsaOrderChangeController extends TsaBaseController {
 		Order order = new Order();
 		order.setOrdNo(ordNo);
 
-		Collection<Order> orderInfoList 		= orderService.getOrderInfoList(order);
-		Collection<Order> orderRfAccountInfo 	= orderChangeService.getRefundAccount(order);
+		Collection<Order> orderInfoList 		= coreOrderService.getOrderInfoList(order);
+		Collection<Order> orderRfAccountInfo 	= coreOrderChangeService.getRefundAccount(order);
 
 		mav.addObject("bankList"				, rendererService.getCommonCodeList("G940"));
 		mav.addObject("orderRfAccountInfo"		, orderRfAccountInfo);
@@ -544,7 +556,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		if (isValid) {
 			// 2021.06.09 비회원이 아닌경우만 고객 계좌에 등록
 			if (order.getCustNo() > 0) {
-				orderChangeService.saveRefundAccount(order);
+				coreOrderChangeService.saveRefundAccount(order);
 			}
 		} else {
 			throw new IllegalStateException("환불계좌정보가 맞지 않습니다!");
@@ -577,12 +589,36 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[2] = TscConstants.OrderDetailStat.DELIVERY_COMPLETE.value();
 		order.setOrdDtlStatArr(ordDtlStatArr);
 
-		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
-		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
+		Collection<Order> cancelRequestTargetList = coreOrderChangeService.getCancelRequestTargetList(order);
+		Collection<Order> orderInfoList = coreOrderService.getOrderInfoList(order);
 
 		if (order.getOrdChgSq() > 0) {
-			Collection<Order> exchangeInfoList = orderChangeService.getExchangeInfo(order);
+			Collection<Order> exchangeInfoList = coreOrderChangeService.getExchangeInfo(order);
 			mav.addObject("exchangeInfoList"		, exchangeInfoList);								// 교환정보
+
+			// 반품TO교환 주문정보 설정
+			List<Integer> ordDtlNoList = new ArrayList<>();
+			if (exchangeInfoList != null && exchangeInfoList.size() > 0) {
+				String chgGb = exchangeInfoList.iterator().next().getChgGb();
+				mav.addObject("chgGb", chgGb);
+
+				if (TscConstants.OrderChangeGb.RETURN.value().equals(chgGb)) {
+					for (Order tmp : exchangeInfoList) {
+						if (tmp.getChgQty() > 0 && !ordDtlNoList.contains(tmp.getOrdDtlNo())) {
+							ordDtlNoList.add(tmp.getOrdDtlNo());
+						}
+					}
+
+					Collection<Order> tmpList = new ArrayList<>();
+					for (Order tmp : cancelRequestTargetList) {
+						if(ordDtlNoList.contains(tmp.getOrdDtlNo())) {
+							tmpList.add(tmp);
+						}
+					}
+
+					cancelRequestTargetList = tmpList;
+				}
+			}
 		}
 
 		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));	// 교환사유
@@ -590,7 +626,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
 		mav.addObject("ordNo"						, order.getOrdNo());								// 주문번호
 		mav.addObject("ordChgSq"					, order.getOrdChgSq());								// 주문변경번호
-		mav.addObject("orderDelvAddrInfo"			, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("orderDelvAddrInfo"			, coreOrderService.getDeliveryAddrList(order));		// 배송정보
 		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));	// 전화번호국번
 		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));	// (휴대전화)번호국번
 
@@ -625,13 +661,13 @@ public class TsaOrderChangeController extends TsaBaseController {
 		excReq.setRegNo(userNo);
 
 		// 교환처리
-		result = orderChangeService.exchReq(excReq);
+		result = coreOrderChangeService.exchReq(excReq);
 		int ordChgSq = result.getInt("ordChgSq");
 
 		if (ordChgSq > 0) {
 			try {
 				// 교환 알림톡 관련 정보 조회
-				OrderChange orderChange = orderChangeService.getKakaoOrderReturnInfo(ordChgSq);
+				OrderChange orderChange = coreOrderChangeService.getKakaoOrderReturnInfo(ordChgSq);
 
 				// 교환 알림톡 발송
 				if (StringUtils.isNotBlank(orderChange.getOrdPhnno())) {
@@ -639,7 +675,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 				}
 
 				// 교환 안내 메일 정보 조회
-				GagaMap replaceInfo = orderChangeService.getMailOrderExchangeReplaceInfo(orderChange);
+				GagaMap replaceInfo = coreOrderChangeService.getMailOrderExchangeReplaceInfo(orderChange);
 
 				// 교환 안내 메일 발송
 				if (StringUtils.isNotBlank(replaceInfo.getString("ordEmail"))) {
@@ -690,7 +726,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 		excReq.setIpAddress(ipAddress);
 
 		// 교환철회 처리
-		result = orderChangeService.exchangeCancel(excReq);
+		result = coreOrderChangeService.exchangeCancel(excReq);
 
 		// 처리 결과 코드에 따른 메세지 설정
 		if (result.get("status").equals(GagaResponseStatus.SUCCESS.getCode())) {
@@ -703,90 +739,25 @@ public class TsaOrderChangeController extends TsaBaseController {
 	}
 
 	/**
-	 * 취소요청 (ADMIN, NAPY, 외부몰) (배치) (사용안함)
+	 * 반품TO교환 처리
 	 * 
-	 * @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 = orderRefundService.cnclRtnRefundAmt2(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.cnclComplete(mav, userNo);
-	//	
-	// 	return super.ok("성공");
-	// }
-	
-	/**
-	 * 취소요청승인 (관리자)
-	 * @param OrderChange - 주문취소신청정보
-	 * @return
-	 * @author jsh77b
-	 * @since 2021. 01. 20
+	 * @param OrderChange
+	 * @return GagaResponse
+	 * @author card007
+	 * @since 2021. 06. 17
 	 */
-	// @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 = orderChangeService.cnclComplete(mav, userNo);
-	//	
-	// 	return super.ok("성공");
-	// }
+	@PostMapping("/return/to/exchange")
+	@ResponseBody
+	public GagaResponse returnToExchange(@RequestBody OrderChange orderChange) {
+		int userNo = TsaSession.getInfo().getUserNo();
+		orderChange.setUserNo(userNo);
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+
+		orderChangeService.returnToExchange(orderChange);
+
+		return super.ok();
+	}
 }
 
 

+ 1 - 1
src/main/java/com/style24/admin/biz/web/TsaOrderRefundController.java

@@ -52,7 +52,7 @@ public class TsaOrderRefundController extends TsaBaseController {
 		}
 		
 		// 1. 환불금액계산
-		mav = orderRefundService.cnclRtnRefundAmt2(cancelReqList);
+		mav = orderRefundService.cnclRtnRefundAmt(cancelReqList);
 		
 		return mav;
 	}

+ 30 - 1
src/main/java/com/style24/persistence/domain/Poll.java

@@ -1,7 +1,9 @@
 package com.style24.persistence.domain;
 
 
+import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 
@@ -62,8 +64,9 @@ public class Poll extends TscBaseDomain{
 	private int voteRate;		// 투표율
 	private int numbers;		// 투표율 구하기위한 변수선언 
 	private String name;			// 투표율 구하기위한 변수선언 
-	private String voterNm;			// 투표자명
+	private String custNm;			// 투표자명
 	private String voteDt;			// 투표일시
+	private String custId;		//투표자 아이디
 	
 	private String ques1;
 	private String ques2;
@@ -75,6 +78,32 @@ public class Poll extends TscBaseDomain{
 	private String ques8;
 	private String ques9;
 	private String ques10;
+	 
+	private String dummy1;
+	private String dummy2;
+	private String dummy3;
+	private String dummy4;
+	private String dummy5;
+	private String dummy6;
+	private String dummy7;
+	private String dummy8;
+	private String dummy9;
+	private String dummy10;
+
+	
+	// 암호화 대상 복호화 처리
+	public String getCustNm() {
+		this.custNm = CryptoUtils.decryptAES(this.custNm);
+		return this.custNm;
+	}
+
+	// Masking
+	public String getMaskingCustId() {
+		return TsaSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.id(this.custId) : this.custId;
+	}
+	public String getMaskingCustNm() {
+		return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.name(getCustNm()) : getCustNm();
+	}
 	
 	
 

+ 56 - 9
src/main/java/com/style24/persistence/mybatis/shop/TsaPoll.xml

@@ -232,15 +232,61 @@
 	<!-- POLL관리 투표자 목록 조회 -->
 	<select id="getPollVoterList" parameterType="Poll" resultType="Poll">
 		/* TsaPoll.getPollVoterList */
-		SELECT B.CUST_ID         AS VOTER_NM    
-		     , A.ANS_CUST_NO      AS ANS_CUST_NO 
-		     , A.REG_DT			  AS VOTE_DT   
-		     , A.DUMMY		      AS DUMMY  
-		FROM   TB_POLL_ANSWER A
-		     , TB_CUSTOMER B
-		WHERE  A.ANS_CUST_NO = B.CUST_NO
-		AND    A.POLL_QSQ = #{pollQsq}
-		ORDER  BY B.CUST_NM
+		WITH TAB AS (
+		    -- 설문의 질문 목록
+		    SELECT POLL_SQ
+		         , POLL_QSQ
+		         , POLL_QTITLE
+		         , RANK() OVER(ORDER BY POLL_QSQ) AS RK
+		    FROM   TB_POLL_QUESTION
+		    WHERE  POLL_SQ = #{pollSq}
+		    AND    DEL_YN = 'N'
+		    ORDER  BY POLL_QSQ
+		    LIMIT 10
+		)
+		SELECT Z.ANS_CUST_NO
+		      ,Z.REG_DT AS VOTE_DT
+		      ,Z.POLL_SQ
+		      ,Z.ANS_INDEX
+		      ,C.CUST_NM 
+		      ,C.CUST_ID 
+		      ,Z.DUMMY1  
+		      ,Z.DUMMY2  
+		      ,Z.DUMMY3  
+		      ,Z.DUMMY4  
+		      ,Z.DUMMY5  
+		      ,Z.DUMMY6  
+		      ,Z.DUMMY7  
+		      ,Z.DUMMY8  
+		      ,Z.DUMMY9  
+		      ,Z.DUMMY10 
+		FROM (
+		-- 고객별 답변 목록
+		SELECT B.ANS_CUST_NO
+		     , B.ANS_INDEX
+		     , A.POLL_SQ
+		     , DATE_FORMAT(B.REG_DT, '%Y-%m-%d') AS REG_DT 
+		     , MAX(CASE WHEN A.RK = 1  THEN B.DUMMY ELSE '' END) AS DUMMY1
+		     , MAX(CASE WHEN A.RK = 2  THEN B.DUMMY ELSE '' END) AS DUMMY2
+		     , MAX(CASE WHEN A.RK = 3  THEN B.DUMMY ELSE '' END) AS DUMMY3
+		     , MAX(CASE WHEN A.RK = 4  THEN B.DUMMY ELSE '' END) AS DUMMY4
+		     , MAX(CASE WHEN A.RK = 5  THEN B.DUMMY ELSE '' END) AS DUMMY5
+		     , MAX(CASE WHEN A.RK = 6  THEN B.DUMMY ELSE '' END) AS DUMMY6
+		     , MAX(CASE WHEN A.RK = 7  THEN B.DUMMY ELSE '' END) AS DUMMY7
+		     , MAX(CASE WHEN A.RK = 8  THEN B.DUMMY ELSE '' END) AS DUMMY8
+		     , MAX(CASE WHEN A.RK = 9  THEN B.DUMMY ELSE '' END) AS DUMMY9
+		     , MAX(CASE WHEN A.RK = 10 THEN B.DUMMY ELSE '' END) AS DUMMY10
+		FROM   TAB A
+		     , TB_POLL_ANSWER B
+		WHERE  A.POLL_QSQ = B.POLL_QSQ
+		GROUP  BY B.ANS_CUST_NO
+		         ,B.REG_DT 
+		         ,B.ANS_INDEX
+		         ,A.POLL_SQ
+		)Z
+		INNER JOIN TB_CUSTOMER C ON Z.ANS_CUST_NO = C.CUST_NO 
+		WHERE Z.ANS_INDEX != 0
+		ORDER BY Z.REG_DT ASC
 	</select>
 	
 	<!-- POLL QUESTION 보기 조회 -->
@@ -296,5 +342,6 @@
 		SELECT POLL_QTITLE 
 		FROM TB_POLL_QUESTION TPQ 
 		WHERE POLL_SQ = #{pollSq}
+		AND DEL_YN = 'N'
 	</select>
 </mapper>

BIN
src/main/webapp/WEB-INF/lib/xbean.jar


+ 53 - 13
src/main/webapp/WEB-INF/views/marketing/PollListForm.html

@@ -69,7 +69,7 @@
 				<li style="width:40%">
 					<div class="panelBar">
 						<ul class="panelBar">
-						<h4 id="pollQtitle">투표자 수</h4>
+						<!-- <h4 id="pollQtitle">투표자 수</h4> -->
 							<li class="right">
 								<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
 							</li>
@@ -302,10 +302,21 @@
 	];
 
 	var columnDefsVote = [
-		{headerName: '투표자ID'		, field:'voterNm'	, width:150, cellClass: 'text-center'},
-		{headerName: '답변'	, field:'dummy'	, width:200, cellClass: 'text-center'},
-		{headerName: '투표자회원번호'	, field:'ansCustNo'	, width:200, cellClass: 'text-center'},
-		{headerName: '투표일시'		, field:'voteDt'	, width:200, cellClass: 'text-center'},
+		{headerName: 'ID'			, field:'maskingCustId'	, width:100, cellClass: 'text-center',enableValue: true},
+		{headerName: '이름'			, field:'maskingCustNm'	, width:100, cellClass: 'text-center',enableValue: true},
+		{headerName: '투표일시'		, field:'voteDt'	, width:100, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques1'	    , field:'dummy1'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques2'	    , field:'dummy2'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques3'	    , field:'dummy3'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques4'	    , field:'dummy4'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques5'	    , field:'dummy5'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques6'	    , field:'dummy6'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques7'	    , field:'dummy7'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques8'	    , field:'dummy8'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques9'	    , field:'dummy9'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques10'	    , field:'dummy10'	, width:200, cellClass: 'text-center',enableValue: true},
+		/* {headerName: '투표자회원번호'	, field:'ansCustNo'	, width:200, cellClass: 'text-center'}, */
+		
 	];
 
 	var gridOptionsPoll = gagaAgGrid.getGridOptions(columnDefsPoll);
@@ -340,12 +351,14 @@
 	var selectPoll = [];
 	gridOptionsPoll.onCellClicked = function(event)  {
 		if (event.colDef.field == 'pollTitle') {
-			$('#registerForm input[name=pollTitle]').focus();
+			//$('#registerForm input[name=pollTitle]').focus();
 			fnAllDeleteQuestion();
 			fnSetDetail(event);
-		} else if (event.colDef.field == 'pollQtitle') {
 			fnSearchVote(event.data);
-		} else if (event.colDef.field == 'pollQtypeNm'){
+			
+		} /* else if (event.colDef.field == 'pollQtitle') {
+			fnSearchVote(event.data);
+		} */ else if (event.colDef.field == 'pollQtypeNm'){
 			if(event.data.pollQtypeNm == '단수형' || event.data.pollQtypeNm == '복수형'){
 				var actionUrl = "/marketing/poll/voter/list/popup/form?pollQsq=" + event.data.pollQsq +"&pollQtype=" + event.data.pollQtype;
 				cfnOpenModalPopup(actionUrl, 'pollVoteRatePopup');
@@ -353,21 +366,44 @@
 		}
 	}
 
+	// Grid 속성 변경
+/* 	var fnChangeGridProperty = function() {
+		
+		
+	} */
+	
 	// 투표자 조회
 	var fnSearchVote = function(data) {
-		if (gagajf.isNull(data.pollQtitle)) {
+		
+		/* if (gagajf.isNull(data.pollQtitle)) {
 			$('#pollQtitle').text(' 투표자수');
 		} else {
 			$('#pollQtitle').text(' [' + data.pollQtitle + '] 투표자수');
-		}
-
-
+		} */
 		var params = new Object();
 		params.pollQsq = data.pollQsq;
-
+		params.pollSq = data.pollSq;
+	
 		var jsonData = JSON.stringify(params);
 		gagajf.ajaxJsonSubmit('/marketing/poll/voter/list', jsonData, function(dataList) {
+			// 컬럼 이름 변경
+			$.each(dataList.questionList, function(idx, item) {
+				gagaAgGrid.setColumnHeaderName(gridOptionsVote, 'dummy' + (idx+1), item.pollQtitle);
+			});
+			
+			gridOptionsVote.columnApi.resetColumnState();
 			gridOptionsVote.api.setRowData(dataList.pollList);
+			
+			// 컬럼 숨김 처리
+			/*  for (var k = 1; k <= 10; k++) {
+				// 컬럼 숨긴걸 초기화 한다.
+				gagaAgGrid.showOrHideColumn(gridOptionsVote, 'ques' + k, true);
+			
+				// 컬럼을 숨긴다.
+				if (k > dataList.questionList.length) {
+					gagaAgGrid.showOrHideColumn(gridOptionsVote, 'ques' + k, false);
+				}
+			}  */
 		});
 
 	}
@@ -463,6 +499,10 @@
 
 	// 문항추가
 	var fnAddQuestion = function(data) {
+		if ($('#questionTable tr').length > 10) {
+			mcxDialog.alert('문항은 최대 10개까지 등록 가능합니다.');
+			return;
+		}
 		if (typeof data == 'undefined') {
 			var cnt = $('#questionTable tr').length;
 

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

@@ -34,7 +34,8 @@
 				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
 					<button type="button" class="btn btn-success" th:unless="${ordChgSq > 0}" id="fnExchangeRequestSubmit" onclick="fnExchange()">교환요청</button>
-					<button type="button" class="btn btn-success" th:if="${ordChgSq > 0}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button>
+					<button type="button" class="btn btn-success" th:if="${ordChgSq > 0 and chgGb == 'G680_40'}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button>
+					<button type="button" class="btn btn-success" th:if="${ordChgSq > 0 and chgGb == 'G680_30'}" id="fnReturnToExchangeSubmit" onclick="fnExchange()">교환변경</button>
 				</div>
 				
 				<table class="frmStyle">
@@ -47,13 +48,13 @@
 					<tbody>
 						<tr>
 							<th>교환사유 <i class="star"></i></th>
-							<td th:unless="${ordChgSq > 0}">
+							<td th:if="${ordChgSq <= 0 or chgGb == 'G680_30'}">
 								<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>
 								</select>
 							</td>
-							<td th:if="${ordChgSq > 0}" th:id="chgReason"></td>
+							<td th:if="${ordChgSq > 0 and chgGb == 'G680_40'}" th:id="chgReason"></td>
 							<th>귀책사유</th>
 							<td><span id="imputeReason"></span></td>
 						</tr>
@@ -197,6 +198,7 @@ var exchangeInfoList;														// 교환정보
 var wdGb;																	// 회수방법
 var chgerRtnMemo;															// 반품메모
 var delvMemo;																// 배송메모
+var chgGb;																	// 변경구분
 
 var temp1 = true;
 var temp2 = true;
@@ -210,6 +212,7 @@ if (ordChgSq > 0) {
 	chgerRtnMemo			= exchangeInfoList[0].chgerRtnMemo;				// 반품메모
 	delvMemo				= exchangeInfoList[0].delvMemo;					// 배송메모
 	wdGb					= exchangeInfoList[0].wdGb;						// 회수방법
+	chgGb					= exchangeInfoList[0].chgGb;					// 변경구분
 }
 
 // 1. 주문정보(교환대상)
@@ -292,7 +295,7 @@ var columnExchangeReqList = [
 				, width			: 100
 				, cellClass		: "text-center"
 				, cellRenderer	: function (params) {
-					if (ordChgSq > 0) {
+					if (chgGb == 'G680_40' && ordChgSq > 0) {
 						$.each(exchangeInfoList, function(idx, item) {
 							if (params.data.itemCd == item.itemCd && params.data.optCd1 == item.optCd1) {
 								strVal = item.optCd2;
@@ -557,7 +560,7 @@ var isCustomer = false;
 //  사유 변경
 var fnChangeChgReason = function(reasonCd){
 	var arrReasonCd = reasonCd.split(":");
-	var customerReasonArr = ['G689_10', 'G689_30'];
+	var customerReasonArr = ['G689_10', 'G689_30', 'G688_10'];
 	
 	isCustomer = false;
 
@@ -584,18 +587,39 @@ var fnChangeChgReason = function(reasonCd){
 
 // 교환요청
 var fnExchange = function () {
-	var qty		= false;
-	var opt		= false;
+	var qty		= true;
+	var opt		= true;
 	var wdGb	= $('#wdGb:checked').val();
 
 	// 1. 교환수량 체크
-	$.each(cancelRequestTargetList, function(idx, item) {
-		if (item.chgQty > 0) {
-			qty = true;
-			
-			if (!gagajf.isNull(item.ordChgOpt)) {
-				opt = true;
-			}
+	//$.each(cancelRequestTargetList, function(idx, item) {
+	//	if (item.chgQty > 0) {
+	//		qty = true;
+	//
+	//		if (!gagajf.isNull(item.ordChgOpt)) {
+	//			opt = true;
+	//		}
+	//	}
+	//});
+	// 반품TO교환 신청 수량 설정
+	if (chgGb == 'G680_30') {
+		exchangeRequestList = cancelRequestTargetList;
+		$.each(exchangeRequestList, function(idx, exchangeRequest) {
+			$.each(exchangeInfoList , function(idx2, exchangeInfo) {
+				if (exchangeRequest.itemCd == exchangeInfo.itemCd && exchangeRequest.optCd1 == exchangeInfo.optCd1) {
+					exchangeRequest.chgQty = exchangeInfo.chgQty;
+				}
+			});
+		});
+	}
+	
+	$.each(exchangeRequestList, function(idx, item) {
+		if (item.chgQty == null || item.chgQty == 0) {
+			qty = false;
+		}
+
+		if (gagajf.isNull(item.ordChgOpt)) {
+			opt = false;
 		}
 	});
 
@@ -611,10 +635,11 @@ var fnExchange = function () {
 
 	// 2. 교환사유 체크
 	var chgReason = $("#exchangeRequestFrm select[name=selectChgReason]").val();
+	//var chgReason = $('#exchangeRequestFrm input[name=chgReason]').val();
 
 	if (gagajf.isNull(chgReason)) {
 		mcxDialog.alert("교환사유를 입력하세요."); 
-		return ;
+		return;
 	}
 
 	// 5. 회수지정보설정
@@ -729,17 +754,26 @@ var fnExchange = function () {
 		,"recipPhnno"		: recipPhnno
 		,"recipTelno"		: recipTelno
 		,"delvMemo"			: $("#exchangeRequestFrm textarea[name=delvMemo]").val()
+		,"ordChgSq"			: ordChgSq
 	}
 
 	// 주문번호, 교환사유, 교환메모, (취소, 반품, 교환 신청 정보 목록)
 	var jsonData = JSON.stringify(jsonObj);
 	
+	// URL 설정
+	var url;
+	if (chgGb == 'G680_30') {
+		url = '/orderChange/return/to/exchange/';
+	} else {
+		url = '/orderChange/exchangeRequest/';
+	}
+	console.log(jsonObj.ordChgSq);
 	mcxDialog.confirm('교환요청하시겠습니까?', {
 		cancelBtnText		: "반품",
 		sureBtnClick		: function(){
 			// 교환 실행
 			gagajf.ajaxJsonSubmit(
-				'/orderChange/exchangeRequest/'
+				url
 				, jsonData
 				, function() {
 					uifnPopupClose('popupOrderDetail');
@@ -1006,7 +1040,6 @@ $(document).ready(function() {
 		
 		// 8. 데이터 Disabled 처리
 		$('input:radio[name=wdGb]').attr('disabled', true);				// 8-1. 회수방법
-		$('#chgMemo').attr('readOnly', true);							// 8-2. 요청메모
 		$('input[name=chgerNm]').attr('readOnly', true);				// 8-3. 회수지정보 > 보내는사람
 		$('input[name=chgerBaseAddr]').attr('readOnly', true);			// 8-4. 회수지정보 > 기본주소
 		$('input[name=chgerDtlAddr]').attr('readOnly', true);			// 8-5. 회수지정보 > 상세주소
@@ -1017,17 +1050,20 @@ $(document).ready(function() {
 		$('input[name=chgerPhnno2]').attr('readOnly', true);			// 8-7. 회수지정보 > 휴대전화
 		$('input[name=chgerPhnno3]').attr('readOnly', true);			// 8-7. 회수지정보 > 휴대전화
 		$('#chgerRtnMemo').attr('readOnly', true);						// 8-8. 회수지정보 > 반품메모
-		$('input[name=recipNm]').attr('readOnly', true);				// 8-9. 교환지정보 > 받는사람
-		$('input[name=recipBaseAddr]').attr('readOnly', true);			// 8-10. 교환지정보 > 기본주소
-		$('input[name=recipDtlAddr]').attr('readOnly', true);			// 8-11. 교환지정보 > 상세주소
-		$('select[name=recipTelno1]').attr('disabled', true);			// 8-12. 교환지정보 > 일반전화
-		$('input[name=recipTelno2]').attr('readOnly', true);			// 8-12. 교환지정보 > 일반전화
-		$('input[name=recipTelno3]').attr('readOnly', true);			// 8-12. 교환지정보 > 일반전화
-		$('select[name=recipPhnno1]').attr('disabled', true);			// 8-13. 교환지정보 > 휴대전화
-		$('input[name=recipPhnno2]').attr('readOnly', true);			// 8-13. 교환지정보 > 휴대전화
-		$('input[name=recipPhnno3]').attr('readOnly', true);			// 8-13. 교환지정보 > 휴대전화
-		$('#delvMemo').prop('readOnly', true);							// 8-14. 교환지정보 > 배송메모
 		
+		if (chgGb == 'G680_40') {
+			$('#chgMemo').attr('readOnly', true);							// 8-2. 요청메모
+			$('input[name=recipNm]').attr('readOnly', true);				// 8-9. 교환지정보 > 받는사람
+			$('input[name=recipBaseAddr]').attr('readOnly', true);			// 8-10. 교환지정보 > 기본주소
+			$('input[name=recipDtlAddr]').attr('readOnly', true);			// 8-11. 교환지정보 > 상세주소
+			$('select[name=recipTelno1]').attr('disabled', true);			// 8-12. 교환지정보 > 일반전화
+			$('input[name=recipTelno2]').attr('readOnly', true);			// 8-12. 교환지정보 > 일반전화
+			$('input[name=recipTelno3]').attr('readOnly', true);			// 8-12. 교환지정보 > 일반전화
+			$('select[name=recipPhnno1]').attr('disabled', true);			// 8-13. 교환지정보 > 휴대전화
+			$('input[name=recipPhnno2]').attr('readOnly', true);			// 8-13. 교환지정보 > 휴대전화
+			$('input[name=recipPhnno3]').attr('readOnly', true);			// 8-13. 교환지정보 > 휴대전화
+			$('#delvMemo').prop('readOnly', true);							// 8-14. 교환지정보 > 배송메모
+		}
 	}
 });
 </script>

+ 33 - 0
src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -25,6 +25,7 @@
 				<input type="hidden" name="ordNo" 			th:value="${ordNo}"/>
 				<input type="hidden" name="ordChgSq" 		th:value="${ordChgSq}"/>
 				<input type="hidden" name="delvFeeCd" 		th:value="${delvFeeCd}"/>
+				<input type="hidden" name="delvFeeCdGrp" 	th:value="${delvFeeCdGrp}"/>
 				<input type="hidden" name="chgReason" 		value=""/>
 				<input type="hidden" name="chgReasonDesc" 	value=""/>
 				
@@ -40,6 +41,7 @@
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
 					<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="rtnToExcBtn" onclick="fnRtnToExc();">교환변경</button>
 				</div>
 				
 				<table class="frmStyle">
@@ -1292,6 +1294,31 @@ var fnChangeWdGb = function(param) {
 	fnCalculateRefundAmt();
 }
 
+// 반품TO교환 버튼 클릭 이벤트
+var fnRtnToExc = function() {
+	let ordNo = $('#cancelRequestFrm input[name=ordNo]').val();
+	let ordChgSq = $('#cancelRequestFrm input[name=ordChgSq]').val();
+	let delvFeeCd = $('#cancelRequestFrm input[name=delvFeeCd]').val();
+	let delvFeeCdGrp = $('#cancelRequestFrm input[name=delvFeeCdGrp]').val();
+	
+	// 취소요청 구분 (orChgSq null 이면 취소요청화면 있으면 취소요청정보화면)
+	if (ordChgSq == null) {
+		ordChgSq = 0;
+	}
+	
+	var param 		= "";
+	param += "&ordNo=" 			+ ordNo;
+	param += "&delvFeeCd="		+ delvFeeCd;
+	param += "&delvFeeCdGrp="	+ delvFeeCdGrp;
+	param += "&ordChgSq=" 		+ ordChgSq;
+	
+	// 반품상세 팝업 닫기
+	uifnPopupClose('popupReturnRequestForm');
+	
+	var actionUrl = "/orderChange/exchange/request/form?" + param;
+	cfnOpenModalPopup(actionUrl, 'popupExchangeRequestForm');
+}
+
 $(document).ready(function() {
 	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
@@ -1331,6 +1358,11 @@ $(document).ready(function() {
 			$("#rtnReqCancelBtn").css("display", "none");
 		}
 		
+		// 반품TO교환 버튼
+		if (chgStat != "G685_50" && chgStat != "G685_51" && chgStat != "G685_30") {
+			$("#rtnToExcBtn").css("display", "none");
+		}
+		
 		// 직접발송일때 회수지정보 숨김처리
 		if (wdGb == "D") {
 			$("#chgerAdress").css("display", "none");
@@ -1338,6 +1370,7 @@ $(document).ready(function() {
 	} else {
 		$("#rtnReqCompleteBtn").css("display", "none");
 		$("#rtnReqCancelBtn").css("display", "none");
+		$("#rtnToExcBtn").css("display", "none");
 	}
 	
 	// 6. 취소사유 선택