Procházet zdrojové kódy

마이페이지 반품 화면 임시 커밋

card007 před 5 roky
rodič
revize
b05b27aa1b

+ 66 - 1
src/main/java/com/style24/front/biz/web/TsfMypageController.java

@@ -514,6 +514,71 @@ public class TsfMypageController extends TsfBaseController {
 		return mav;
 	}
 
+	/**
+	 * 반품신청
+	 * 
+	 * @param OrderChange
+	 * @return GagaMap
+	 * @author card007
+	 * @since 2021. 03. 30
+	 */
+	@SuppressWarnings("unchecked")
+	@PostMapping("/return")
+	@ResponseBody
+	public GagaMap rtnReq(@RequestBody OrderChange orderChange) {
+		if (orderChange== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		// TODO
+		// @ 주문취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 (선결제 로직)
+
+		// 1. 세션회원조회
+		int custNo = TsfSession.getInfo().getCustNo();
+		orderChange.setCustNo(custNo);
+
+		// 2. 환불 사전 정보 조회
+		GagaMap refundPreInfo = orderChangeService.getRefundPreInfo(orderChange);
+		List<Order> returnReqList = (List<Order>) refundPreInfo.get("cnclReqList");
+		String allCanYn = refundPreInfo.getString("allCanYn");
+
+		// 2. 환불금액계산
+		GagaMap result = coreOrderRefundService.cnclRtnRefundAmt(returnReqList);
+
+		// 3. 주문변경 기본정보 설정
+		result.set("ordNo"			, orderChange.getOrdNo());				// 주문번호
+		result.set("ordChgSq"		, orderChange.getOrdChgSq());			// 주문변경번호
+		result.set("chgReason"		, orderChange.getChgReason());			// 변경사유
+		result.set("chgMemo"		, orderChange.getChgMemo());			// 변경메모
+
+		result.set("accountNo"		, orderChange.getAccountNo());			// 환불계좌번호
+		result.set("accountNm"		, orderChange.getAccountNm());			// 환불계좌예금주명
+		result.set("bankCd"			, orderChange.getBankCd());				// 환불계좌은행코드
+
+		result.set("allCanYn"		, allCanYn);							// 무통장입금전 전체취소 여부 
+		result.set("isCustomer"		, orderChange.getIsCustomer());			// 변경사유 (고객, 회사)
+		result.set("wdGb"			, orderChange.getWdGb());				// 회수방법
+
+		// 4. 주문변경 회수지정보 추가
+		result.set("chgerNm"		, orderChange.getChgerNm());			// 변경자명
+		result.set("chgerEmail"		, orderChange.getChgerEmail());			// 변경자이메일주소
+		result.set("chgerZipcode"	, orderChange.getChgerZipcode());		// 회수지우편번호
+		result.set("chgerBaseAddr"	, orderChange.getChgerBaseAddr());		// 회수지기본주소
+		result.set("chgerDtlAddr"	, orderChange.getChgerDtlAddr());		// 회수지상세주소
+		result.set("chgerPhnno"		, orderChange.getChgerPhnno());			// 변경자핸드폰번호
+		result.set("chgerTelno"		, orderChange.getChgerTelno());			// 변경자전화번호
+		result.set("chgerRtnMemo"	, orderChange.getChgerRtnMemo());		// 반품메모
+
+		// 5. 주문변경 DB 등록 (TB_ORDER_CHANGE, TB_ORDER_CHANGE_DETAIL, TB_REFUND)
+		coreOrderChangeService.rtnReq(result, custNo);
+
+		result.set("status", GagaResponseStatus.SUCCESS.getCode());
+		result.set("message", "반품 신청이 접수되었습니다.");
+
+		return result;
+	}
+
 	/**
 	 * 마이페이지 취소신청 화면
 	 *
@@ -868,7 +933,7 @@ public class TsfMypageController extends TsfBaseController {
 	 * 마이페이지 리뷰화면
 	 *
 	 * @return
-	 * @author sowon	
+	 * @author sowon
 	 * @since 2021. 03. 24
 	 */
 	@GetMapping("/review/form")

+ 13 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsfOrder.xml

@@ -62,6 +62,7 @@
 		     , Z.PURCHASE_CONFIRM_DAY
 		     , Z.DELV_RES_DT
 		     , Z.ORD_REQ_CHG_QTY
+		     , Z.ORD_CAN_CHG_QTY
 		     , Z.BANK_CD
 		     , Z.ACCOUNT_NO
 		     , Z.ACCOUNT_NM
@@ -116,6 +117,7 @@
 					 , TIMESTAMPDIFF(DAY, NOW(), OD.DELV_EDDT + INTERVAL 2 WEEK)		AS PURCHASE_CONFIRM_DAY
 					 , DATE_FORMAT(GRS.DELV_RES_DT, '%Y.%m.%d') AS DELV_RES_DT
 					 , IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_REQ_CHG_QTY
+					 , OD.ORD_QTY - OD.CNCL_RTN_QTY - IFNULL(OCD.ORD_REQ_CHG_QTY, 0) AS ORD_CAN_CHG_QTY
 					 , CA.BANK_CD
 					 , CA.ACCOUNT_NO
 					 , CA.ACCOUNT_NM
@@ -143,8 +145,16 @@
 									 FROM TB_ORDER_CHANGE_DETAIL OCD
 									INNER JOIN TB_ORDER_DETAIL OD
 									   ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
-									WHERE OD.ORD_NO = #{ordNo}
-									  AND OCD.DEL_YN = 'N'
+									WHERE OCD.DEL_YN = 'N'
+		<if test="ordNo != null and ordNo != ''">
+									  AND OD.ORD_NO = #{ordNo}
+		</if>
+		<if test="ordNoList != null">
+									  AND OD.ORD_NO IN
+			<foreach collection="ordNoList" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
 									  AND OCD.CHG_STAT IN ('G685_20', 'G685_30', 'G685_33', 'G685_40')
 									GROUP BY OCD.ORD_DTL_NO
 								  ) OCD
@@ -187,7 +197,7 @@
 				, Z.GOODS_CD, Z.GOODS_NM, Z.LIST_PRICE, Z.SYS_IMG_NM, Z.ORD_DTL_STAT, Z.ORD_QTY, Z.CNCL_RTN_QTY, Z.ORD_AMT, Z.REAL_ORD_AMT
 				, Z.SAVE_PNT_AMT, Z.CNCL_RTN_AMT, Z.PNT_DC_AMT, Z.GFCD_USE_AMT, Z.SHIP_COMP_CD, Z.GIFT_PACK_YN, Z.SHIP_COMP_NM, Z.INVOICE_NO
 				, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD, Z.SHOT_DELV_YN, Z.CHANGEABLE_YN, Z.SELF_GOODS_YN, Z.BRAND_NM, Z.ORD_DTL_STAT_NM, Z.REVIEW_SQ
-				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM
+				, Z.REVIEWABLE_YN, Z.PURCHASE_CONFIRM_DAY, Z.DELV_RES_DT, Z.ORD_REQ_CHG_QTY, Z.ORD_CAN_CHG_QTY, Z.BANK_CD, Z.ACCOUNT_NO, Z.ACCOUNT_NM
 		ORDER BY Z.ORD_NO DESC, Z.ORD_DTL_STAT, Z.SELF_GOODS_YN DESC, Z.SHOT_DELV_YN DESC, Z.SUPPLY_COMP_CD, Z.DELV_FEE_CD
 	</select>
 

+ 2 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsfOrderChange.xml

@@ -410,8 +410,8 @@
 			 , CPH.ORD_DTL_NO
 			 , SUM(CPH.PNT_AMT) AS PNT_AMT
 		  FROM TB_CUST_POINT_HST CPH
-		  INNER JOIN TB_CUST_POINT CP
-		  ON CP.CUST_PNT_SQ = CPH.CUST_PNT_SQ
+		 INNER JOIN TB_CUST_POINT CP
+		    ON CP.CUST_PNT_SQ = CPH.CUST_PNT_SQ
 		 WHERE CPH.CUST_NO = #{custNo}
 		   AND CPH.ORD_NO = #{ordNo}
 		<if test="ordDtlNoArr != null">

+ 1 - 1
src/main/resources/config/application-tsit.yml

@@ -36,7 +36,7 @@ upload:
         target.path: /TSIT/servers/files/data/goods
         max.size: 10
         allow.extension: jpg|gif|jpeg|png
-        view: //tdimage.style24.com/Upload/ProductImage
+        view: //image.istyle24.com/Upload/ProductImage
     image:
         target.path: /TSIT/servers/files/data
         max.size: 10

+ 53 - 34
src/main/webapp/WEB-INF/views/web/mypage/MypageCancelFormWeb.html

@@ -182,6 +182,12 @@
 							</li>
 						</ul>
 					</div>
+					<div class="info_footer_area" id="addDeliveryFee" style="display:none">
+						<p>
+							<span id="addPayCost">2,500원</span> 배송비 추가 결제가 필요합니다.
+							<input type="hidden" name="addPayCost"/>
+						</p>
+					</div>
 					<div class="btn_footer_area">
 						<button type="button" class="btn btn_default btn_md" onclick="cfnGoToPage(_PAGE_MYPAGE_ORDER_LIST);"><span>취소</span></button>
 						<button type="button" id="btn_refund_pop" class="btn btn_dark btn_md" onclick="fnCancel();"><span>주문 취소</span></button>
@@ -198,63 +204,66 @@
 	let paymentInfo = [[${paymentInfo}]];
 	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
 	let usedPointInfo = [[${usedPointInfo}]];
+	let addPayCost = 0;
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
 		fnSetMypageLnbList(2);
-		
+
 		// 마이페이지 location 설정
 		fnSetMypageLocation('취소/반품/환불내역', '_PAGE_MYPAGE_CRS_LIST', '취소 신청');
-		
+
 		// 셀렉트박스 활성화
-		//var goods_count_selecter = new sCombo('.myOrderView .part_goods .select_custom.select_count');
 		$(".myOrderView .part_goods .select_custom.select_count").each(function() {
 			new sCombo(this);
 		});
 	});
-	
+
 	// 취소 처리
 	var fnCancel = function() {
 		// 취소수량 설정
 		fnChangeCancelQty();
 
-		// 취소수량 체크
-		let index = 0;
-		$.each(cancelList.cancelList, function (idx, item) {
-			index += item.ordCanChgQty;
+		// 주문상세번호 및 취소 수량 설정
+		let ordDtlNoArr = [];
+		let cnclRtnReqQtyArr = [];
+		let chkQty = 0;
+		$.each($('input[name=chgQty]'), function(idx, item) {
+			let chgQty = $(item).val();
+			let ordDtlNo = $(item).attr('ordDtlNo');
+			
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
 		});
-		
-		if (index == 0) {
-			mcxDialog.alert('취소 수량을 선택해주세요.');
+
+		// 취소 수량 체크
+		if (chkQty == 0) {
+			mcxDialog.alert('취소하실 상품의 수량을 선택해주세요.');
 			return false;
 		}
-		
+
 		// 환불계좌 체크
 		let accountNo = $('input[name=accountNo]').val();
 		let accountNm = $('input[name=accountNm]').val();
 		let bankCd = $('input[name=bankCd]').val();
-		
+
 		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_00' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
 			// TODO
 			// 환불계좌 등록 팝업
 			
 			return false;
 		}
-		
+
+		// 추가배송비 PG 처리
+		if (addPayCost > 0) {
+			// TODO
+			// 추가배송비 PG 처리
+		}
+
 		// 취소요청 데이터 설정
 		let url = '/mypage/cancel';
 
-		// 주문상세번호 및 취소 수량 설정
-		let ordDtlNoArr = [];
-		let cnclRtnReqQtyArr = [];
-		$.each($('input[name=chgQty]'), function(idx, item) {
-			let chgQty = $(item).val();
-			let ordDtlNo = $(item).attr('ordDtlNo');
-			
-			ordDtlNoArr.push(Number(ordDtlNo));
-			cnclRtnReqQtyArr.push(Number(chgQty));
-		});
-
 		// 취소 처리
 		let data = {};
 		data.ordNo = oneData.ordNo;
@@ -300,7 +309,7 @@
 		data.ordNo = oneData.ordNo;
 		data.ordDtlNoArr = ordDtlNoArr;
 		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
-		
+
 		let jsonData = JSON.stringify(data);
 
 		gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
@@ -315,13 +324,23 @@
 			let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
 			let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
 			let spanRefundAmt = Number(result.spanRefundAmt);
-			
+
 			let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
 			let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
 			let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-			let refundPayAmt = spanRefundAmt;											// 결제금액 환불
+			let refundPayAmt = spanRefundAmt - spanTotDeliveryFee;						// 결제금액 환불
 			let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-			
+
+			// 추가배송비 영역 설정
+			if (refundPayAmt > 0) {
+				refundPayAmt = spanRefundAmt;
+				$('#addDeliveryFee').css('display', '');
+				$('#addPayCost').text(spanTotDeliveryFee.addComma() + '원');
+				addPayCost = spanTotDeliveryFee;
+			} else {
+				addPayCost = 0;
+			}
+
 			// 금액 설정
 			$('#returnAmt').text(returnAmt.addComma());
 			$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
@@ -341,7 +360,7 @@
 			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
 			let chgQty = chgQtyArr[index];
 			let ordCanChgQty = ordCanChgQtyArr[index];
-			
+
 			if (chgQty > 0) {
 				if (chgQty == ordCanChgQty) {
 					refundPoint += item.pntAmt;
@@ -350,19 +369,19 @@
 				}
 			}
 		});
-		
+
 		return refundPoint;
 	}
 	
 	// 환불 상품권 계산
 	var fnCalculateGiftCard = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
 		let refundGiftCard = 0;
-		
+
 		$.each(usedGiftCardInfo, function(idx, item) {
 			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
 			let chgQty = chgQtyArr[index];
 			let ordCanChgQty = ordCanChgQtyArr[index];
-			
+
 			if (chgQty > 0) {
 				if (chgQty == ordCanChgQty) {
 					refundGiftCard += item.gfcdAmt;
@@ -371,7 +390,7 @@
 				}
 			}
 		});
-		
+
 		return refundGiftCard;
 	}
 </script>

+ 38 - 6
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderDetailFormWeb.html

@@ -442,7 +442,7 @@
 				<input type="hidden" name="ordNo"/>
 				<input type="hidden" name="ordDtlNo"/>
 			</form>
-			<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="post">
+			<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="get">
 				<input type="hidden" name="ordNo"/>
 				<input type="hidden" name="ordDtlNo"/>
 			</form>
@@ -450,17 +450,49 @@
 		</div>
 	</div>
 
-	<!-- 배송지변경 -->
-	<div class="modal fade od_pop adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true"></div>
+	<!-- 배송지변경 팝업 -->
+	<div class="modal fade adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<!-- 배송지변경 팝업 내용 -->
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="adrsChangePop_close" class="close-modal">Close</a>
+	</div>
+	<!-- //배송지변경 팝업 -->
 
 	<!-- 배송지추가 팝업 -->
-	<div class="modal fade od_pop adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true"></div>
+	<div class="modal fade adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<!-- 배송지추가 팝업 내용 -->
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="adrsAddPop_close" class="close-modal">Close</a>
+	</div>
+	<!-- //배송지추가 팝업 -->
 
 	<!-- 배송지수정 팝업 -->
-	<div class="modal fade od_pop adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true"></div>
+	<div class="modal fade adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<!-- 배송지수정 팝업 내용 -->
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="adrsModifyPop_close" class="close-modal">Close</a>
+	</div>
+	<!-- //배송지수정 팝업 -->
 
 	<!-- 배송요청사항수정 팝업 -->
-	<div class="modal fade od_pop rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true"></div>
+	<div class="modal fade rqstModify_pop" id="rqstModifyPop" tabindex="-1" role="dialog" aria-labelledby="rqstModifyLabel" aria-hidden="true">
+		<div class="modal-dialog" role="document">
+			<div class="modal-content">
+				<!-- 배송요청사항수정 팝업 내용 -->
+			</div>
+		</div>
+		<a href="#close-modal" rel="modal:close" id="rqstModifyPop_close" class="close-modal">Close</a>
+	</div>
+	<!-- //배송요청사항수정 팝업 -->
 
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">

+ 6 - 6
src/main/webapp/WEB-INF/views/web/mypage/MypageOrderListFormWeb.html

@@ -200,7 +200,7 @@
 					<input type="hidden" name="ordNo"/>
 					<input type="hidden" name="ordDtlNo"/>
 				</form>
-				<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="post">
+				<form id="reviewForm" name="reviewForm" th:action="@{'/mypage/review/form'}" th:method="get">
 					<input type="hidden" name="ordNo"/>
 					<input type="hidden" name="ordDtlNo"/>
 				</form>
@@ -457,24 +457,24 @@
 					} else {
 						// 주문취소 버튼(입금대기, 결제완료, 상품준비중, 출고처지정, 배송준비중)
 						if (ordDtl.ordDtlStat == 'G013_10' || ordDtl.ordDtlStat == 'G013_20' || ordDtl.ordDtlStat == 'G013_30' || ordDtl.ordDtlStat == 'G013_35' || ordDtl.ordDtlStat == 'G013_40') {
-							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
+							tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'cancel\');"><span>주문 취소</span></button></p>\n';
 						}
 
 						// 교환신청 버튼(배송중, 출고완료, 배송완료)
 						if (ordDtl.ordDtlStat == 'G013_50' || ordDtl.ordDtlStat == 'G013_55' || ordDtl.ordDtlStat == 'G013_60') {
 							// 교환/반품 가능한 상품
 							if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'Y') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
 							}
 							// 교환 신청 불가 상품
 							else if (ordDtl.changeableYn == 'N' && ordDtl.returnableYn == 'Y') {
 								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA);"><span>1:1 문의</span></button></p>\n';
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'return\');"><span>반품 신청</span></button></p>\n';
 							}
 							// 반품 신청 불가 상품
 							else if (ordDtl.changeableYn == 'Y' && ordDtl.returnableYn == 'N') {
-								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
+								tag += '					<p><button type="button" class="btn btn_default btn_sm" ordNo="' + ordDtl.ordNo + '" ordDtlNo="' + ordDtl.ordDtlNo + '" supplyCompCd="' + ordDtl.supplyCompCd + '" ordCanChgQty="' + ordDtl.ordCanChgQty + '" onclick="fnCreateChange(this, \'exchange\');"><span>교환 신청</span></button></p>\n';
 								tag += '					<p><button type="button" class="btn btn_default btn_sm" onclick="cfnGoToPage(_PAGE_ONETOONE_QNA_REG);"><span>1:1 문의</span></button></p>\n';
 							}
 							// 교환/반품 신청 불가 상품

+ 175 - 23
src/main/webapp/WEB-INF/views/web/mypage/MypageReturnFormWeb.html

@@ -127,7 +127,7 @@
 													<ul class="list">
 														<!-- 선택처리 class="selected" / 선택불가 aria-disabled="true" 추가  -->
 														<li class="selected">반품 사유를 선택하세요.</li>
-														<li th:if="${returnReason}" th:each="oneData, status : ${returnReason}" th:value="${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeReason(this);"></li>
+														<li th:if="${returnReason}" th:each="oneData, status : ${returnReason}" th:attr="chgReason=${oneData.cd}" th:text="${oneData.cdNm}" onclick="fnChangeReason(this);"></li>
 													</ul>
 												</div>
 											</div>
@@ -138,7 +138,7 @@
 									<td>
 										<div class="form_field">
 											<div class="input_wrap">
-												<textarea class="doc_reason" name="" id="" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요."  onkeyup="cfnGetTextLength(this, 200, $('#return_cnt'));" style="resize: none;"></textarea>
+												<textarea class="doc_reason" name="chgMemo" id="chgMemo" cols="30" rows="10" placeholder="자세한 사유를 입력해주세요."  onkeyup="cfnGetTextLength(this, 200, $('#return_cnt'));" style="resize: none;"></textarea>
 												<p class="txt_cnt"><span id="return_cnt" class="c_primary">0</span>/200</p>
 											</div>
 										</div>
@@ -191,11 +191,14 @@
 									</tr>
 									<tr>
 										<th>주소</th>
-										<td id="chgerAddr" th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|">
+										<td id="chgerAddr">
+											<th:block th:text="|${deliveryAddrInfo.recipBaseAddr} ${deliveryAddrInfo.recipDtlAddr}|"></th:block>
 											<button type="button" class="btn btn_default btn_sm" onclick="fnChangeDeliveryAddr('chger');"><span>회수지 변경</span></button>
 										</td>
+										<input type="hidden" name="chgerZipcode" th:value="${deliveryAddrInfo.chgerZipcode}">
 										<input type="hidden" name="chgerBaseAddr" th:value="${deliveryAddrInfo.recipBaseAddr}">
 										<input type="hidden" name="chgerDtlAddr" th:value="${deliveryAddrInfo.recipDtlAddr}">
+										<input type="hidden" name="chgerRtnMemo" th:value="${deliveryAddrInfo.chgerRtnMemo}">
 									</tr>
 								</tbody>
 							</table>
@@ -322,13 +325,49 @@
 			</div>
 			<!-- // CONT-BODY -->
 		</div>
+		<!-- 배송지변경 팝업 -->
+		<div class="modal fade adrsChange_pop" id="adrsChangePop" tabindex="-1" role="dialog" aria-labelledby="adrsChangeLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<!-- 배송지변경 팝업 내용 -->
+				</div>
+			</div>
+			<a href="#close-modal" rel="modal:close" id="adrsChangePop_close" class="close-modal">Close</a>
+		</div>
+		<!-- //배송지변경 팝업 -->
+
+		<!-- 배송지추가 팝업 -->
+		<div class="modal fade adrsAdd_pop" id="adrsAddPop" tabindex="-1" role="dialog" aria-labelledby="adrsAddLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<!-- 배송지추가 팝업 내용 -->
+				</div>
+			</div>
+			<a href="#close-modal" rel="modal:close" id="adrsAddPop_close" class="close-modal">Close</a>
+		</div>
+		<!-- //배송지추가 팝업 -->
+
+		<!-- 배송지수정 팝업 -->
+		<div class="modal fade adrsModify_pop" id="adrsModifyPop" tabindex="-1" role="dialog" aria-labelledby="adrsModifyLabel" aria-hidden="true">
+			<div class="modal-dialog" role="document">
+				<div class="modal-content">
+					<!-- 배송지수정 팝업 내용 -->
+				</div>
+			</div>
+			<a href="#close-modal" rel="modal:close" id="adrsModifyPop_close" class="close-modal">Close</a>
+		</div>
+		<!-- //배송지수정 팝업 -->
 	</div>
 <script src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 	let returnList = [[${returnList.returnList}]];
 	let oneData = [[${oneData}]];
+	let paymentInfo = [[${paymentInfo}]];
 	let usedGiftCardInfo = [[${usedGiftCardInfo}]];
 	let usedPointInfo = [[${usedPointInfo}]];
+	var isCustomer = true;
+	let jsonObj = {};
+	let addPayCost = 0;
 
 	$(document).ready(function() {
 		// 마이페이지 LNB 설정
@@ -349,13 +388,89 @@
 			$('#wdGb').css('display','none');
 		}
 	});
-	
+
 	// 반품 처리
 	var fnReturn = function() {
-		// TODO
-		// 반품신청 처리
+		let url = '/mypage/return';
+
+		// 반품 사유 체크
+		let chgReason = $('input[name=chgReason]').val();
+		if (gagajf.isNull(chgReason)) {
+			mcxDialog.alert('반품사유를 선택해주세요.');
+			return false;
+		}
+
+		// 반송 송장번호 체크
+		let wdGb = $('input[name=wdGb]:radio:checked').val();
+		let wdInvoiceNo = $('input[name=chgReason]').val();
+		if (wdGb == 'D' && gagajf.isNull(wdInvoiceNo)) {
+			mcxDialog.alert('직접 반송하신 송장번호를 입력해주세요.');
+			return false;
+		}
+
+		// 주문상세번호 및 반품 수량 설정
+		let ordDtlNoArr = [];
+		let cnclRtnReqQtyArr = [];
+		let chkQty = 0;
+		$.each($('input[name=chgQty]'), function(idx, item) {
+			let chgQty = $(item).val();
+			let ordDtlNo = $(item).attr('ordDtlNo');
+			
+			ordDtlNoArr.push(Number(ordDtlNo));
+			cnclRtnReqQtyArr.push(Number(chgQty));
+			chkQty += chgQty;
+		});
+
+		// 반품 수량 체크
+		if (chkQty == 0) {
+			mcxDialog.alert('반품하실 상품의 수량을 선택해주세요.');
+			return false;
+		}
+
+		// 환불계좌 체크
+		let accountNo = $('input[name=accountNo]').val();
+		let accountNm = $('input[name=accountNm]').val();
+		let bankCd = $('input[name=bankCd]').val();
+
+		if (paymentInfo.payMeans == 'G014_20' && paymentInfo.payStat == 'G016_00' && (gagajf.isNull(accountNo) || gagajf.isNull(accountNm) || gagajf.isNull(bankCd))) {
+			// TODO
+			// 환불계좌 등록 팝업
+			
+			return false;
+		}
+
+		// 추가배송비 PG 처리
+		if (addPayCost > 0) {
+			// TODO
+			// 추가배송비 PG 처리
+		}
+
+		let data = {};
+		data.ordNo = oneData.ordNo;
+		data.ordChgSq = 0;
+		data.chgReason = chgReason;
+		data.chgMemo = $('input[name=chgMemo]').val();
+		data.accountNo = $('input[name=accountNo]').val();
+		data.accountNm = $('input[name=accountNm]').val();
+		data.bankCd = $('input[name=bankCd]').val();
+		data.isCustomer = isCustomer;
+		data.wdGb = wdGb;
+		data.chgerNm = $('#chgerNm').text();
+		data.chgerZipcode = $('input[name=chgerZipcode]').val();
+		data.chgerBaseAddr = $('input[name=chgerBaseAddr]').val();
+		data.chgerDtlAddr = $('input[name=chgerDtlAddr]').val();
+		data.chgerPhnno = $('input[name=chgerPhnno]').val();
+		data.chgerRtnMemo = $('input[name=chgerRtnMemo]').val();
+		data.ordDtlNoArr = ordDtlNoArr;
+		data.cnclRtnReqQtyArr = cnclRtnReqQtyArr;
+
+		let jsonData = JSON.stringify(data);
+
+		gagajf.ajaxJsonSubmit(url, jsonData, function() {
+			cfnGoToPage(_PAGE_MYPAGE_CRS_LIST);
+		});
 	}
-	
+
 	// 반품 수량 변경 이벤트 처리
 	var fnChangeReturnQty = function(param) {
 		let url = '/mypage/cancel/refund/amt/calculate';
@@ -390,8 +505,8 @@
 
 			gagajf.ajaxJsonSubmit(url, jsonData, function (result) {
 				// 환불포인트, 환불상품권 금액 계산
-				let refundPoint = fnCalculatePoint(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
-				let refundGiftCard = fnCalculateGiftCard(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+				let refundPoint = fnCalculatePoint(cnclRtnReqQtyArr, ordDtlNoArr, ordCanChgQtyArr);
+				let refundGiftCard = fnCalculateGiftCard(cnclRtnReqQtyArr, ordDtlNoArr, ordCanChgQtyArr);
 
 				let spanCnclRtnAmt = Number(result.spanCnclRtnAmt);
 				let sumDeliveryFee = Number(result.sumDeliveryFee);
@@ -400,13 +515,41 @@
 				let spanTmtbDcAmt = Number(result.spanTmtbDcAmt);
 				let spanPrePntDcAmt = Number(result.spanPrePntDcAmt);
 				let spanRefundAmt = Number(result.spanRefundAmt);
-				
+				let spanTotRtnDelvFee = Number(result.spanTotRtnDelvFee);
+
+				// 반품 사유 및 반품 방식 배송비 계산
+				if (result.spanRealCnclRtnAmt > 0) {
+					let wdGb = $('input[name=wdGb]:radio:checked').val();
+
+					// 회사사유 : 추가배송비 0, 반품배송비 0
+					if (!isCustomer) {
+						spanTotDeliveryFee = 0;
+						spanTotRtnDelvFee = 0;
+					}
+					// 고객사유(직접발송) : 반품배송비 0
+					else if (wdGb == 'D') {
+						spanTotRtnDelvFee = 0;
+					}
+				}
+
+				let addDelvFee = spanTotDeliveryFee + spanTotRtnDelvFee;
+
 				let goodsCancelAmt = spanCnclRtnAmt;										// 상품취소금액
-				let deliveryFee = sumDeliveryFee - spanTotDeliveryFee;						// 배송비
+				let deliveryFee = sumDeliveryFee - addDelvFee;								// 배송비
 				let deductDcAmt = 0 - spanCpnDcAmt - spanTmtbDcAmt - spanPrePntDcAmt;		// 할인금액 차감(쿠폰+다다익선+선포인트)
-				let refundPayAmt = spanRefundAmt;											// 결제금액 환불
+				let refundPayAmt = spanRefundAmt - addDelvFee;								// 결제금액 환불
 				let returnAmt = refundPayAmt + refundPoint + refundGiftCard;				// 환불예정금액
-				
+
+				// 추가배송비 영역 설정
+				if (refundPayAmt < 0) {
+					refundPayAmt = spanRefundAmt;
+					$('#addDeliveryFee').css('display', '');
+					$('#addPayCost').text(addDelvFee.addComma() + '원');
+					addPayCost = addDelvFee;
+				} else {
+					addPayCost = 0;
+				}
+
 				// 금액 설정
 				$('#returnAmt').text(returnAmt.addComma());
 				$('#goodsCancelAmt').text(goodsCancelAmt.addComma());
@@ -430,15 +573,24 @@
 			$('#chgerLocation').css('display', 'none');
 			$('#returnLocation').css('display', '');
 		}
+
+		// 환불금액 계산
+		fnChangeReturnQty();
 	});
 	
 	// 반품 사유 변경 이벤트
 	var fnChangeReason = function(param) {
-		// TODO
-		// 반품 사유 변경 처리
-		console.log($(param).val());
-		$(param).parent().parent().find('input[name=chgReason]').val($(param).val());
-		fnChangeQty();
+		var customerReasonArr = ['G688_10', 'G688_11', 'G688_12', 'G688_13', 'G688_15' , 'G688_21', 'G688_30'];
+		let chgReason = $(param).attr('chgReason');
+
+		// 귀책사유체크(취소,반품,교환)
+		isCustomer = customerReasonArr.includes(chgReason);
+
+		// 반품 사유 설정
+		$(param).parent().parent().find('input[name=chgReason]').val(chgReason);
+
+		// 환불금액 계산
+		fnChangeReturnQty();
 	}
 
 	// 환불 포인트 계산
@@ -458,19 +610,19 @@
 				}
 			}
 		});
-		
+
 		return refundPoint;
 	}
-	
+
 	// 환불 상품권 계산
 	var fnCalculateGiftCard = function(chgQtyArr, ordDtlNoArr, ordCanChgQtyArr) {
 		let refundGiftCard = 0;
-		
+
 		$.each(usedGiftCardInfo, function(idx, item) {
 			let index = ordDtlNoArr.indexOf(item.ordDtlNo);
 			let chgQty = chgQtyArr[index];
 			let ordCanChgQty = ordCanChgQtyArr[index];
-			
+
 			if (chgQty > 0) {
 				if (chgQty == ordCanChgQty) {
 					refundGiftCard += item.gfcdAmt;
@@ -479,7 +631,7 @@
 				}
 			}
 		});
-		
+
 		return refundGiftCard;
 	}
 </script>

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

@@ -34,7 +34,7 @@
 						<div class="input_wrap"> 
 							<input type="text" class="form_control" name="recipZipcode" placeholder="배송주소" id="">
 						</div>
-						<button type="button" class="btn btn_dark btn_sm">
+						<button type="button" class="btn btn_dark btn_sm" onclick="fnOpenDaumAddr();">
 							<span>우편번호 찾기</span>
 						</button>
 					</div>

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

@@ -54,7 +54,7 @@
 	</div>
 </div>
 <div class="modal-footer">
-	<button class="btn btn_dark" id="btn_adrsAdd_pop"><span>배송지 추가</span></button>
+	<button class="btn btn_dark" id="btn_addrAdd_pop"><span>배송지 추가</span></button>
 </div>
 </form>