Преглед изворни кода

Merge remote-tracking branch 'origin/develop' into xodud1202

xodud lee пре 4 година
родитељ
комит
8eaaa448da
48 измењених фајлова са 498 додато и 253 уклоњено
  1. 0 1
      src/main/java/com/style24/admin/biz/dao/TsaDeliveryDao.java
  2. 9 0
      src/main/java/com/style24/admin/biz/dao/TsaSystemDao.java
  3. 9 1
      src/main/java/com/style24/admin/biz/dao/TsaWithdrawDao.java
  4. 8 0
      src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java
  5. 6 11
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  6. 19 14
      src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java
  7. 5 1
      src/main/java/com/style24/admin/biz/service/TsaSystemService.java
  8. 32 0
      src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java
  9. 62 77
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  10. 3 2
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  11. 17 2
      src/main/java/com/style24/admin/biz/web/TsaWithdrawController.java
  12. 1 0
      src/main/java/com/style24/persistence/domain/Withdraw.java
  13. 3 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml
  14. 3 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  15. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaShoplinker.xml
  16. 9 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml
  17. 26 4
      src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml
  18. 2 2
      src/main/webapp/WEB-INF/views/board/FaqDetailForm.html
  19. 1 1
      src/main/webapp/WEB-INF/views/business/AflinkForm.html
  20. 1 1
      src/main/webapp/WEB-INF/views/business/BrandForm.html
  21. 1 1
      src/main/webapp/WEB-INF/views/customer/GoodsQnaDetailForm.html
  22. 1 1
      src/main/webapp/WEB-INF/views/customer/OneToOneQnaDetailForm.html
  23. 3 1
      src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html
  24. 1 1
      src/main/webapp/WEB-INF/views/display/CategoryForm.html
  25. 3 3
      src/main/webapp/WEB-INF/views/display/LookbookBannerPopupForm.html
  26. 2 2
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  27. 3 3
      src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html
  28. 2 2
      src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html
  29. 1 1
      src/main/webapp/WEB-INF/views/display/PopupListForm.html
  30. 1 1
      src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html
  31. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html
  32. 1 1
      src/main/webapp/WEB-INF/views/goods/GoodsSizeInfoForm.html
  33. 1 28
      src/main/webapp/WEB-INF/views/goods/GoodsWmsIncomelotForm.html
  34. 28 0
      src/main/webapp/WEB-INF/views/goods/GoodsWmsIncomelotSkuForm.html
  35. 11 1
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  36. 12 9
      src/main/webapp/WEB-INF/views/marketing/PlanDetailPopupForm.html
  37. 1 1
      src/main/webapp/WEB-INF/views/marketing/PollListForm.html
  38. 2 2
      src/main/webapp/WEB-INF/views/order/CnclReqForm.html
  39. 56 35
      src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html
  40. 4 4
      src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html
  41. 8 3
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  42. 4 4
      src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html
  43. 5 5
      src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html
  44. 51 14
      src/main/webapp/WEB-INF/views/order/RtnReqForm.html
  45. 4 1
      src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html
  46. 1 1
      src/main/webapp/WEB-INF/views/system/CommoncodeForm.html
  47. 2 2
      src/main/webapp/WEB-INF/views/system/MenuForm.html
  48. 71 5
      src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html

+ 0 - 1
src/main/java/com/style24/admin/biz/dao/TsaDeliveryDao.java

@@ -5,7 +5,6 @@ import java.util.Collection;
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Delivery;
 
-
 /**
  * 배송관리 Dao
  *

+ 9 - 0
src/main/java/com/style24/admin/biz/dao/TsaSystemDao.java

@@ -207,6 +207,15 @@ public interface TsaSystemDao {
 	 */
 	void createMenuAccessHistory(MenuAccessHst menuAccessHst);
 
+	/**
+	 * 공통코드PK 건수
+	 * @param commoncode - 공통코드 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 7. 22
+	 */
+	int getCommonCodePrimaryKeyCount(CommonCode commoncode);
+
 	/**
 	 * 공통코드 등록/수정
 	 * @param commoncode - 공통코드 정보

+ 9 - 1
src/main/java/com/style24/admin/biz/dao/TsaWithdrawDao.java

@@ -192,6 +192,14 @@ public interface TsaWithdrawDao {
 	Withdraw getRefundInfo(Withdraw withdraw);
 
 
+	/**
+	 * 회수지시목록 - 회수철회 알림톡 정보 
+	 * 
+	 * @param withdraw - 주문변경번호
+	 * @return Withdraw
+	 * @author moon
+	 * @since 2021. 07. 21
+	 */
+	Withdraw getWithdrawInfo(Withdraw withdraw);
 	
-
 }

+ 8 - 0
src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java

@@ -19,10 +19,13 @@ import com.style24.core.biz.dao.TscOrderDao;
 import com.style24.core.biz.service.TscDeliveryService;
 import com.style24.core.biz.service.TscWmsService;
 import com.style24.core.support.env.TscConstants.OrderDetailStat;
+import com.style24.core.support.env.TscConstants.MallGb;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.WmsDelivery;
+import com.style24.core.biz.service.TscKakaotalkService;
+
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -63,6 +66,11 @@ public class TsaDeliveryService {
 	@Autowired
 	private Environment env;
 	
+	@Autowired
+	private TscKakaotalkService kakaotalkService;
+		
+	
+	
 	/**
 	 * 배송 목록 건수
 	 *

+ 6 - 11
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -2762,24 +2762,19 @@ public class TsaGoodsService {
 	 * @since 2021. 01. 05
 	 */
 	@Transactional("shopTxnManager")
-	public void saveFreeGoods(Collection<WmsGoods> wmsGoodsList) {
+	public void saveFreeGoods(Collection<IfIncomelot> wmsGoodsList) {
 
-		for (WmsGoods wmsGoods : wmsGoodsList) {
+		for (IfIncomelot wmsGoods : wmsGoodsList) {
 			FreeGoods freeGoods = new FreeGoods();
-			freeGoods.setProductNo(wmsGoods.getProductNo());
-			freeGoods.setProductCode(wmsGoods.getProductCode());
-			freeGoods.setGoodsNm(wmsGoods.getProductName());
+			freeGoods.setProductNo(Integer.parseInt(wmsGoods.getProductno()));
+			freeGoods.setProductCode(wmsGoods.getProductcode());
+			freeGoods.setGoodsNm(wmsGoods.getProductname());
 			freeGoods.setBrandCd(wmsGoods.getBrandCd());
 			freeGoods.setUseYn("Y");
 			freeGoods.setUpdNo(TsaSession.getInfo().getUserNo());
 			freeGoods.setRegNo(TsaSession.getInfo().getUserNo());
 			goodsDao.saveFreeGoods(freeGoods);
-
-			//WMS 상품등록구분
-			wmsGoods.setGoodsRegGb("F");
-			wmsGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-			wmsGoods.setRegNo(TsaSession.getInfo().getUserNo());
-			goodsDao.saveGoodsWmsIncomelot(wmsGoods);
+		
 		}
 	}
 

+ 19 - 14
src/main/java/com/style24/admin/biz/service/TsaShoplinkerService.java

@@ -199,9 +199,9 @@ public class TsaShoplinkerService {
 				if( "Y".equals(goodsMap.getSyncYn())) {
 					sbRequest.append("			<market_price>").append(goodsMap.getSupplyPrice()).append("</market_price>\n");
 					sbRequest.append("			<sale_price>").append(goodsMap.getSalePrice()).append("</sale_price>\n");
-					sbRequest.append("			<supply_price>").append(goodsMap.getSupplyPrice()).append("</supply_price>\n");
+					sbRequest.append("			<supply_price>").append(goodsMap.getSalePrice()).append("</supply_price>\n");
 					sbRequest.append("			<market_price_p>").append(goodsMap.getSupplyPrice()).append("</market_price_p>\n");
-					sbRequest.append("			<sale_price_p>").append(goodsMap.getSalePrice()).append("</sale_price_p>\n");
+					sbRequest.append("			<sale_price_p>").append(goodsMap.getSupplyPrice()).append("</sale_price_p>\n");
 					sbRequest.append("			<supply_price_p>").append(goodsMap.getSupplyPrice()).append("</supply_price_p>\n");
 				}else{
 					sbRequest.append("			<market_price>").append(0).append("</market_price>\n");
@@ -349,18 +349,22 @@ public class TsaShoplinkerService {
 
 				// 1) 상세내용 - 상품설명
 				htmlDesc = "<div class=\"st_descrp_box\" style=\"max-height:1100px; overflow:hidden; text-align: left; color:#222;\">";
-				htmlDesc += "<div class=\"st_desc_simple\" style=\"position:relative; margin-top:0px; margin-left:auto; margin-right:auto;\">";
-				htmlDesc += "<span class=\"st_tit_desc\" style=\"display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;\">"+goodsMap.getDetailDescNew10()+"</span>";
-				htmlDesc += "<span class=\"st_ptxt01\" style=\"font-size:16px;font-weight:200;line-height:1.5;word-break:keep-all;color:#666666;\">";
-				htmlDesc += goodsMap.getDetailDescNew20();
-				htmlDesc += "</span>";
-				htmlDesc += "</div>";
-				htmlDesc += "<div class=\"st_desc_character\" style=\"position:relative; margin-top:40px; margin-left:auto; margin-right:auto;\">";
-				htmlDesc += "<span class=\"st_tit_desc\" style=\"display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;\">상품특징</span>";
-				htmlDesc += "<span class=\"st_ptxt01\" style=\"font-size:16px;font-weight:200;line-height:1.5;word-break:keep-all;color:#666666;\">";
-				htmlDesc += goodsMap.getDetailDescNew30();
-		        htmlDesc += "</span>";
-        		htmlDesc += "</div>";
+				if( null != goodsMap.getDetailDescNew20()) {
+					htmlDesc += "<div class=\"st_desc_simple\" style=\"position:relative; margin-top:0px; margin-left:auto; margin-right:auto;\">";
+					htmlDesc += "<span class=\"st_tit_desc\" style=\"display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;\">"+goodsMap.getDetailDescNew10()+"</span>";
+					htmlDesc += "<span class=\"st_ptxt01\" style=\"font-size:16px;font-weight:200;line-height:1.5;word-break:keep-all;color:#666666;\">";
+					htmlDesc += goodsMap.getDetailDescNew20();
+					htmlDesc += "</span>";
+					htmlDesc += "</div>";
+				}
+				if( null != goodsMap.getDetailDescNew30()) {
+					htmlDesc += "<div class=\"st_desc_character\" style=\"position:relative; margin-top:40px; margin-left:auto; margin-right:auto;\">";
+					htmlDesc += "<span class=\"st_tit_desc\" style=\"display:block; margin-bottom:10px; font-size:18px; font-weight:500; letter-spacing:-0.025em;\">상품특징</span>";
+					htmlDesc += "<span class=\"st_ptxt01\" style=\"font-size:16px;font-weight:200;line-height:1.5;word-break:keep-all;color:#666666;\">";
+					htmlDesc += goodsMap.getDetailDescNew30();
+			        htmlDesc += "</span>";
+	        		htmlDesc += "</div>";
+				}
 				htmlDesc += "</div>";
 
 				// 2) 상세내용 - 상품옵션별 색상
@@ -525,6 +529,7 @@ public class TsaShoplinkerService {
 						if( "하의".equals(size.getSizeTypecd())) {
 							htmlDesc += "<td style=\"position:relative; padding:20px 0; border-bottom:1px solid #ddd; font-weight:200; font-size:16px; letter-spacing:-0.025em; text-align:center;\">"+ size.getSizeValue5() +"</td>";
 						}
+						htmlDesc += "</tr>";
                 		cnt ++;
                 	}
 

+ 5 - 1
src/main/java/com/style24/admin/biz/service/TsaSystemService.java

@@ -412,9 +412,13 @@ public class TsaSystemService {
 	 */
 	@Transactional("shopTxnManager")
 	public void saveCommonCode(CommonCode commoncode) {
+		if (systemDao.getCommonCodePrimaryKeyCount(commoncode) > 0) {
+			throw new IllegalStateException("이미 등록된 코드가 있습니다.(코드구분: " + commoncode.getCdGb() + ", 코드: " + commoncode.getCd() + ")");
+		}
+
 		commoncode.setRegNo(TsaSession.getInfo().getUserNo());
 		commoncode.setUpdNo(TsaSession.getInfo().getUserNo());
-		commoncode.setCdNm(commoncode.getCdNm().replace("&gt;", ">"));
+//		commoncode.setCdNm(commoncode.getCdNm().replace("&gt;", ">"));
 		systemDao.saveCommonCode(commoncode);
 	}
 

+ 32 - 0
src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java

@@ -508,6 +508,38 @@ public class TsaWithdrawService {
 		}
 	}
 
+	/**
+	 * 회수 철회 알림톡(KAKAO)
+	 *
+	 * @param Withdraw
+	 * @return void
+	 * @author moon
+	 * @since 2021. 07. 21
+	 */
+	@Transactional("shopTxnManager")
+	public void sendRecallCancel(Withdraw withdraw) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		String gubun = withdraw.getGubun();
+		
+		Withdraw refundOrdchgSq = new Withdraw();
+		refundOrdchgSq.setOrdChgSq(withdraw.getOrdChgSq());
+		Withdraw info = withdrawDao.getWithdrawInfo(refundOrdchgSq);
+		
+		Order order = new Order();
+		order.setOrdNo(info.getOrdNo());
+		order.setCustNo(info.getCustNo());
+		order.setOrdNm(info.getOrdNm());
+		order.setGoodsNm(info.getGoodsNm());
+		order.setGoodsCnt(info.getGoodsCnt()+"");
+		order.setOrdPhnno(info.getOrdPhnno());
+		order.setChgerBaseAddr(info.getChgerBaseAddr());
+		
+		try {
+			kakaotalkService.sendRecallCancel(order, userNo, gubun);
+		} catch(Exception e) {
+			log.debug("kakaotalkService Exception OrdNo:"+withdraw.getOrdNo());
+		}
 
+	}
 
 }

+ 62 - 77
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -2,24 +2,6 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.util.GagaStringUtil;
-import com.style24.admin.biz.service.TsaCustomerService;
-import com.style24.admin.support.util.TsitUtil;
-import com.style24.core.biz.service.TscKakaotalkService;
-import com.style24.core.biz.service.TscMailService;
-import com.style24.core.support.env.TscConstants;
-import com.style24.core.support.session.TscSession;
-import com.style24.core.support.util.CryptoUtils;
-import com.style24.persistence.TscPageRequest;
-import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.CustContactHst;
-import com.style24.persistence.domain.CustDeliveryAddr;
-import com.style24.persistence.domain.CustGrade;
-import com.style24.persistence.domain.Customer;
-import com.style24.persistence.domain.CustomerSearch;
-import com.style24.persistence.domain.GiftCard;
-
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -33,21 +15,35 @@ import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
 import com.style24.admin.biz.service.TsaCounselService;
+import com.style24.admin.biz.service.TsaCustomerService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.service.TscAnswerPhaseService;
+import com.style24.core.biz.service.TscKakaotalkService;
+import com.style24.core.biz.service.TscMailService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.CryptoUtils;
+import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.AnswerPhase;
 import com.style24.persistence.domain.Counsel;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.CustContactHst;
+import com.style24.persistence.domain.CustDeliveryAddr;
+import com.style24.persistence.domain.CustGrade;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.CustomerSearch;
+import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
-import com.style24.persistence.domain.Order;
-import com.style24.persistence.domain.Plan;
-import com.style24.persistence.domain.Point;
-import com.style24.persistence.domain.Review;
+import com.gagaframework.web.util.GagaStringUtil;
 
 /**
  * 고객 Controller
@@ -116,15 +112,15 @@ public class TsaCustomerController extends TsaBaseController {
 	@ResponseBody
 	public GagaMap getOneToOneQnaList(@RequestBody Counsel counsel) {
 		GagaMap result = new GagaMap();
-		
+
 		counsel.setPageable(new TscPageRequest(counsel.getPageNo() - 1, counsel.getPageSize()));
 		counsel.getPageable().setTotalCount(counselService.getOneToOneQnaListCount(counsel));
-		
+
 		Collection<Counsel> counselList = counselService.getOneToOneQnaList(counsel);
-		
+
 		result.set("pageing", counsel);
 		result.set("counselList", counselList);
-		
+
 		return result;
 	}
 
@@ -182,21 +178,21 @@ public class TsaCustomerController extends TsaBaseController {
 
 		counselService.updateQnaAnswer(counsel);
 
-		// TODO. 고객이 SMS답변수신을 요청했을 때
+		// 고객이 알림톡답변수신을 요청했을 때
 		if (counsel.getSmsReqYn().equals("Y")) {
 			try {
 				if (counsel.getCounselType().equals("C")) {
 					// 일대일문의상세 조회
 					Counsel tCounsel = counselService.getOneToOneQna(counsel.getCounselSq());
 					// 1:1문의답변완료안내 카카오알림톡 발송
-					kakaotalkService.sendOneToOneAnswerNotify(tCounsel,tCounsel.getCustNo());
-				}else if (counsel.getCounselType().equals("G")) {
+					kakaotalkService.sendOneToOneAnswerNotify(tCounsel, tCounsel.getCustNo());
+				} else if (counsel.getCounselType().equals("G")) {
 					// 상품문의상세 조회
 					Counsel tCounsel = counselService.getGoodsQna(counsel.getCounselSq());
 					// 상품문의답변완료안내 카카오알림톡 발송
-					kakaotalkService.sendGoodsAskNotify(tCounsel,tCounsel.getCustNo());					
+					kakaotalkService.sendGoodsAskNotify(tCounsel, tCounsel.getCustNo());
 				}
-				
+
 			} catch (Exception e) {
 				// Do nothing
 			}
@@ -238,18 +234,17 @@ public class TsaCustomerController extends TsaBaseController {
 	@PostMapping("/goods/qna/list")
 	@ResponseBody
 	public GagaMap getGoodsQnaList(@RequestBody Counsel counsel) {
-		
+
 		GagaMap result = new GagaMap();
-		
+
 		counsel.setPageable(new TscPageRequest(counsel.getPageNo() - 1, counsel.getPageSize()));
 		counsel.getPageable().setTotalCount(counselService.getGoodsQnaListCount(counsel));
-		
+
 		Collection<Counsel> counselList = counselService.getGoodsQnaList(counsel);
-		
+
 		result.set("pageing", counsel);
 		result.set("counselList", counselList);
-		
-		
+
 		return result;
 	}
 
@@ -271,7 +266,7 @@ public class TsaCustomerController extends TsaBaseController {
 		mav.addObject("counselInfo", counselService.getGoodsQna(counselSq));
 
 		// 문의용 답변문구
-		mav.addObject("ansPhaseList", rendererService.getQnaAnswerPhaseList("G061_20"));
+		mav.addObject("ansPhaseList", rendererService.getQnaAnswerPhaseList("G061_21"));
 
 		mav.setViewName("customer/GoodsQnaDetailForm");
 
@@ -322,7 +317,7 @@ public class TsaCustomerController extends TsaBaseController {
 		mav.addObject("managedRsnList", rendererService.getCommonCodeList("G103", "Y"));
 
 		// 간편가입유형
-		mav.addObject("snsTypeList", rendererService.getCommonCodeList("G105","Y"));
+		mav.addObject("snsTypeList", rendererService.getCommonCodeList("G105", "Y"));
 
 		mav.setViewName("customer/CustomerActiveListForm");
 
@@ -342,14 +337,14 @@ public class TsaCustomerController extends TsaBaseController {
 		GagaMap result = new GagaMap();
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(customerSearch.getCondition())) {
-			if(customerSearch.getSearch().equals("custNm") || customerSearch.getSearch().equals("email")){
+			if (customerSearch.getSearch().equals("custNm") || customerSearch.getSearch().equals("email")) {
 				String[] multiParams = customerSearch.getCondition().replaceAll("\r", "").split("\n");
 				for (int i = 0; i < multiParams.length; i++) {
 					multiParams[i] = CryptoUtils.encryptAES(multiParams[i]);
 				}
 
 				customerSearch.setConditions(multiParams);
-			}else{
+			} else {
 				customerSearch.setConditions(customerSearch.getCondition().replaceAll("\r", "").split("\n"));
 			}
 		}
@@ -358,12 +353,12 @@ public class TsaCustomerController extends TsaBaseController {
 		if ("custNm".equals(customerSearch.getSearchGb()) || "email".equals(customerSearch.getSearchGb())) {
 			customerSearch.setSearchTxt(CryptoUtils.encryptAES(customerSearch.getSearchTxt()));
 		}
-		if(!"Y".equals(customerSearch.getCpnPubPopYn())){
+		if (!"Y".equals(customerSearch.getCpnPubPopYn())) {
 			customerSearch.setCpnPubPopYn("N");
 		}
 		customerSearch.encryptData();	//데이터 암호화 필요
 		customerSearch.setRegNo(TsaSession.getInfo().getUserNo());
-		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo()-1, customerSearch.getPageSize()));
+		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo() - 1, customerSearch.getPageSize()));
 		customerSearch.getPageable().setTotalCount(customerService.getCustomerActiveListCount(customerSearch));
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 
@@ -393,7 +388,7 @@ public class TsaCustomerController extends TsaBaseController {
 		mav.addObject("genderGbList", rendererService.getCommonCodeList("G007"));
 
 		// 회원 구분
-		mav.addObject("custGbList", rendererService.getCommonCodeList("G100","Y"));
+		mav.addObject("custGbList", rendererService.getCommonCodeList("G100", "Y"));
 
 		// 회원 등급
 		mav.addObject("custGradeList", rendererService.getCommonCodeList("G110"));
@@ -439,7 +434,7 @@ public class TsaCustomerController extends TsaBaseController {
 
 		// 포인트반영상태
 		mav.addObject("pntUploadStatList", rendererService.getCommonCodeList("G070"));
-		
+
 		// 상품평포인트반영상태
 		mav.addObject("reviewPntStatList", rendererService.getCommonCodeList("G043"));
 
@@ -513,17 +508,13 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @since 2021. 01. 21
 	 */
 	@GetMapping("/lms/popup/form")
-	public ModelAndView lmsPopupForm(@RequestParam(value = "elementCellPhnno", required = false) String elementCellPhnno
-									, @RequestParam(value = "elementCustNo") String elementCustNo
-									, @RequestParam(value = "elementMaskingCellPhnno", required = false) String maskingCellPhnno
-									, @RequestParam(value = "pageGb", required = false) String pageGb) {
+	public ModelAndView lmsPopupForm(@RequestParam(value = "elementCellPhnno", required = false) String elementCellPhnno, @RequestParam(value = "elementCustNo") String elementCustNo, @RequestParam(value = "elementMaskingCellPhnno", required = false) String maskingCellPhnno, @RequestParam(value = "pageGb", required = false) String pageGb) {
 		ModelAndView mav = new ModelAndView();
 		// 휴대폰 번호
 		mav.addObject("elementCellPhnno", elementCellPhnno);
 
-
 		// 휴대폰 번호
-		mav.addObject("maskingCellPhnno", StringUtils.defaultString(maskingCellPhnno,""));
+		mav.addObject("maskingCellPhnno", StringUtils.defaultString(maskingCellPhnno, ""));
 
 		// 고객 아이디
 		mav.addObject("elementCustNo", elementCustNo);
@@ -570,8 +561,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @since 2021. 01. 25
 	 */
 	@GetMapping("/cellphone/change/popup/form")
-	public ModelAndView cellphoneChangePopupForm(@RequestParam(value = "elementCellPhnno", required = false) String elementCellPhnno
-			, @RequestParam(value = "elementCustNo") String elementCustNo) {
+	public ModelAndView cellphoneChangePopupForm(@RequestParam(value = "elementCellPhnno", required = false) String elementCellPhnno, @RequestParam(value = "elementCustNo") String elementCustNo) {
 		ModelAndView mav = new ModelAndView();
 		// 휴대폰 번호
 		mav.addObject("elementCellPhnno", elementCellPhnno);
@@ -609,7 +599,6 @@ public class TsaCustomerController extends TsaBaseController {
 		TsaSession.setAttribute("certNo", certNo);
 		TsaSession.setAttribute("cellPhnno", customer.getCellPhnno());
 
-
 		Customer custInfo = customerService.getCustomerInfo(customer.getCustNo());
 		customer.setCustNm(custInfo.getCustNm());
 		customer.setCertNo(certNo);
@@ -664,9 +653,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @since 2021. 01. 21
 	 */
 	@GetMapping("/email/popup/form")
-	public ModelAndView emailPopupForm(@RequestParam(value = "elementEmail") String elementEmail
-									, @RequestParam(value = "elementCustNo") String elementCustNo
-									, @RequestParam(value = "elementMaskingEmail", required = false) String elementMaskingEmail) {
+	public ModelAndView emailPopupForm(@RequestParam(value = "elementEmail") String elementEmail, @RequestParam(value = "elementCustNo") String elementCustNo, @RequestParam(value = "elementMaskingEmail", required = false) String elementMaskingEmail) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -674,7 +661,7 @@ public class TsaCustomerController extends TsaBaseController {
 		mav.addObject("elementEmail", elementEmail);
 
 		// 마스킹된 이메일
-		mav.addObject("elementMaskingEmail", StringUtils.defaultString(elementMaskingEmail,""));
+		mav.addObject("elementMaskingEmail", StringUtils.defaultString(elementMaskingEmail, ""));
 
 		// 고객 번호
 		mav.addObject("elementCustNo", elementCustNo);
@@ -718,7 +705,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @since 2021. 01. 21
 	 */
 	@GetMapping("/secede/popup/form")
-	public ModelAndView emailPopupForm( @RequestParam(value = "elementCustNo") String elementCustNo) {
+	public ModelAndView emailPopupForm(@RequestParam(value = "elementCustNo") String elementCustNo) {
 
 		ModelAndView mav = new ModelAndView();
 
@@ -763,7 +750,7 @@ public class TsaCustomerController extends TsaBaseController {
 	public GagaMap getCustomerOrderList(@RequestBody CustomerSearch customerSearch) {
 		GagaMap result = new GagaMap();
 		customerSearch.setRegNo(TsaSession.getInfo().getUserNo());
-		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo()-1, customerSearch.getPageSize()));
+		customerSearch.setPageable(new TscPageRequest(customerSearch.getPageNo() - 1, customerSearch.getPageSize()));
 		customerSearch.getPageable().setTotalCount(customerService.getCustomerOrderListCount(customerSearch));
 		result.set("pageing", customerSearch);
 		result.set("custOrderList", customerService.getCustomerOrderList(customerSearch));
@@ -891,11 +878,11 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @author jsshin
 	 * @since 2021. 01. 21
 	 */
-		@GetMapping("/review/list/{custNo}")
-		@ResponseBody
-		public Collection<Review> getCustomerReviewList(@PathVariable Integer custNo) {
-			return customerService.getCustomerReviewList(custNo);
-		}
+	@GetMapping("/review/list/{custNo}")
+	@ResponseBody
+	public Collection<Review> getCustomerReviewList(@PathVariable Integer custNo) {
+		return customerService.getCustomerReviewList(custNo);
+	}
 
 	/**
 	 * 회원상세-회원등급변경이력
@@ -905,11 +892,11 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @author jsshin
 	 * @since 2021. 01. 21
 	 */
-		@GetMapping("/change/grade/list/{custNo}")
-		@ResponseBody
-		public Collection<CustGrade> getCustomerChageGradeList(@PathVariable Integer custNo) {
-			return customerService.getCustomerChangeGradeList(custNo);
-		}
+	@GetMapping("/change/grade/list/{custNo}")
+	@ResponseBody
+	public Collection<CustGrade> getCustomerChageGradeList(@PathVariable Integer custNo) {
+		return customerService.getCustomerChangeGradeList(custNo);
+	}
 
 	/**
 	 * 회원상세-회원접촉이력
@@ -940,7 +927,6 @@ public class TsaCustomerController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
-
 	/**
 	 * 탈퇴회원
 	 * @return ModelAndView
@@ -1051,13 +1037,13 @@ public class TsaCustomerController extends TsaBaseController {
 			try {
 				boolean isRelase = customerService.releaseDormantCustomer(customer);
 				if (isRelase) {
-					succCnt ++;
+					succCnt++;
 				} else {
-					failCnt ++;
+					failCnt++;
 				}
 			} catch (Exception e) {
 				log.error(e.getMessage());
-				failCnt ++;
+				failCnt++;
 			}
 		}
 		result.setInt("totalCnt", totalCnt);
@@ -1085,10 +1071,10 @@ public class TsaCustomerController extends TsaBaseController {
 		for (Customer customer : customerCollection) {
 			try {
 				customerService.deleteSecedeCustomer(customer.getCustNo());
-				succCnt ++;
+				succCnt++;
 			} catch (Exception e) {
 				log.error(e.getMessage());
-				failCnt ++;
+				failCnt++;
 			}
 		}
 		result.setInt("totalCnt", totalCnt);
@@ -1098,5 +1084,4 @@ public class TsaCustomerController extends TsaBaseController {
 		return result;
 	}
 
-
 }

+ 3 - 2
src/main/java/com/style24/admin/biz/web/TsaGoodsController.java

@@ -325,7 +325,8 @@ public class TsaGoodsController extends TsaBaseController {
 	 */
 	@PostMapping("/notiInfo/list")
 	@ResponseBody
-	public Collection<NotiInfo> getNotiInfoList(NotiInfo notiInfo) {
+	public Collection<NotiInfo> getNotiInfoList(@RequestBody NotiInfo notiInfo) {
+		log.info("notiInfo == {}", notiInfo);
 		return goodsService.getNotiInfoList(notiInfo);
 	}
 
@@ -1489,7 +1490,7 @@ public class TsaGoodsController extends TsaBaseController {
 	 */
 	@PostMapping("/free/goods/save")
 	@ResponseBody
-	public GagaResponse saveFreeGoods(@RequestBody Collection<WmsGoods> wmsGoodsList) {
+	public GagaResponse saveFreeGoods(@RequestBody Collection<IfIncomelot> wmsGoodsList) {
 		goodsService.saveFreeGoods(wmsGoodsList);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}

+ 17 - 2
src/main/java/com/style24/admin/biz/web/TsaWithdrawController.java

@@ -426,7 +426,7 @@ public class TsaWithdrawController extends TsaBaseController {
 	}	
 	
 	/**
-	 * 출고처지정 취소 
+	 * 재회수지시 
 	 *
 	 * @param
 	 * @return
@@ -441,5 +441,20 @@ public class TsaWithdrawController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
-
+	/**
+	 * 회수철회 알림톡(kAKAO)
+	 *
+	 * @param
+	 * @return
+	 * @throws Exception
+	 * @author moon
+	 * @since 2020. 04. 20
+	 */
+	@PostMapping("/direct/recallCancel")
+	@ResponseBody
+	public GagaResponse sendRecallCancel(@RequestBody Withdraw param) throws Exception {
+		withdrawService.sendRecallCancel(param);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+	
 }

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

@@ -91,6 +91,7 @@ public class Withdraw extends TscBaseDomain {
 	private String delvFeeCdGrp;
 	private String refundConfirm;
 	private String shipCompCd;
+	private String gubun;
 	
 	
 	private Integer ordNo;

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

@@ -190,7 +190,7 @@
 							      INNER JOIN TB_GOODS C               ON ODI.ITEM_CD    = C.GOODS_CD
 							      INNER JOIN TB_DELIVERY_ADDR D       ON B.DELV_ADDR_SQ = D.DELV_ADDR_SQ
 								  INNER JOIN TB_PAYMENT       P       ON A.ORD_NO       = P.ORD_NO  AND P.PAY_STAT = 'G016_30' AND P.PAY_GB = 'O'
-							 LEFT OUTER JOIN TB_CUST_ACCOUNT  T       ON A.CUST_NO      = T.CUST_NO AND T.DEFAULT_YN = 'Y' AND T.DEL_YN = 'N'
+							 LEFT OUTER JOIN TB_CUST_ACCOUNT  T       ON A.CUST_NO      = T.CUST_NO AND T.DEL_YN = 'N' AND T.CUST_NO NOT IN(0)
 							WHERE 1=1 
 							  AND B.GOODS_TYPE NOT IN ('G056_S')
 					        <include refid="getDeliveryListCondition_sql"/>
@@ -252,7 +252,7 @@
 							      INNER JOIN TB_GOODS C               ON B.GOODS_CD     = C.GOODS_CD
 							      INNER JOIN TB_DELIVERY_ADDR D       ON B.DELV_ADDR_SQ = D.DELV_ADDR_SQ
 								  INNER JOIN TB_PAYMENT       P       ON A.ORD_NO       = P.ORD_NO  AND P.PAY_STAT = 'G016_30' AND P.PAY_GB ='O'
-							 LEFT OUTER JOIN TB_CUST_ACCOUNT  T       ON A.CUST_NO      = T.CUST_NO AND T.DEFAULT_YN = 'Y' AND T.DEL_YN = 'N'
+							 LEFT OUTER JOIN TB_CUST_ACCOUNT  T       ON A.CUST_NO      = T.CUST_NO AND T.DEL_YN = 'N' AND T.CUST_NO NOT IN(0)
 							WHERE 1=1
 							  AND B.GOODS_TYPE IN ('G056_S')
 							<include refid="getDeliveryListCondition_sql"/>  
@@ -1245,4 +1245,5 @@
 		   AND ORD_DTL_NO = #{ordDtlNo}
 	</update>
 		
+			
 </mapper>

+ 3 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml

@@ -4052,6 +4052,9 @@
 		     , #{updNo}
 		     , NOW()
 		)
+		ON DUPLICATE KEY UPDATE
+		       UPD_NO = #{updNo}
+		      ,UPD_DT = NOW()
 	</insert>
 	
 	<!-- WMS 입고상품 사은품 상품 구분 저장 -->

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

@@ -141,7 +141,7 @@
 		FROM TB_OPTION A INNER JOIN TB_IF_MEASUREMENT B ON A.OPT_CD = B.SKUCODE /*A.PRODUCT_NO = B.PRODUCTNO*/
 		WHERE A.GOODS_CD = #{goodsCd}
 		GROUP BY A.OPT_CD2, B.TYPECD, B.VALUE1, B.VALUE2, B.VALUE3, B.VALUE4, B.VALUE5
-		ORDER BY A.OPT_CD2
+		ORDER BY B.TYPECD, B.VALUE1, B.VALUE2, B.VALUE3, B.VALUE4, B.VALUE5
 	</select>
 
 	<!-- 상품등록-고시정보 -->

+ 9 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaSystem.xml

@@ -565,6 +565,15 @@
 		ORDER  BY DISP_ORD
 	</select>
 
+	<!-- 공통코드PK 건수 -->
+	<select id="getCommonCodePrimaryKeyCount" parameterType="CommonCode" resultType="int">
+		/* TsaSystem.getCommonCodePrimaryKeyCount */
+		SELECT COUNT(*) AS CNT
+		FROM   TB_COMMON_CODE
+		WHERE  CD_GB = #{cdGb}
+		AND    CD = #{cd}
+	</select>
+	
 	<!-- 공통코드 등록/수정 -->
 	<insert id="saveCommonCode" parameterType="CommonCode">
 		/* TsaSystem.saveCommonCode */

+ 26 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml

@@ -610,9 +610,9 @@
 				, E.MALL_GB 
 				, (SELECT SUM((OD.ORD_QTY - OD.CNCL_RTN_QTY) * DI.ITEM_QTY)  FROM TB_ORDER_DETAIL OD JOIN TB_ORDER_DETAIL_ITEM DI ON OD.ORD_NO = DI.ORD_NO AND OD.ORD_DTL_NO = DI.ORD_DTL_NO WHERE OD.ORD_NO= E.ORD_NO AND OD.ORD_DTL_STAT NOT IN ('G013_00','G013_97','G013_98','G013_99')) AS  TOTAL_ORD_QTY -- 주문 총수량  
 				, CASE WHEN (SELECT COUNT(*) FROM TB_ORDER_RECALL_EXCEPTION_ITEM EI  WHERE EI.ORDER_DTL_NO = D.ORD_DTL_NO AND EI.REASON_CODE IN('09','11')) > 0 THEN 'Y' ELSE 'N' END AS DELV_EXPN_YN
-				, CA.ACCOUNT_NO 
-				, CA.ACCOUNT_NM 
-				, CA.BANK_CD 	
+				, CA.RA_NO AS ACCOUNT_NO 
+				, CA.RA_NM AS ACCOUNT_NM 
+				, CA.RA_BANK AS BANK_CD 	
 				, E.ORD_NM 	
 				, C.DELV_ADDR_SQ
 				, F.WD_INVOICE_NO 
@@ -624,7 +624,7 @@
 		  JOIN TB_ORDER E             ON E.ORD_NO = C.ORD_NO 
 		  JOIN TB_WITHDRAW F ON F.ORD_CHG_SQ = A.ORD_CHG_SQ 
 		  LEFT OUTER JOIN TB_WITHDRAW_DETAIL G ON G.WD_INVOICE_NO = F.WD_INVOICE_NO AND G.ORD_CHG_SQ = F.ORD_CHG_SQ AND D.ITEM_CD = G.GOODS_CD AND D.OPT_CD1 = G.OPT_CD1  AND D.OPT_CD2 = G.OPT_CD2 
-		  LEFT OUTER JOIN TB_CUST_ACCOUNT CA ON CA.CUST_NO = E.CUST_NO 
+		  LEFT OUTER JOIN TB_REFUND CA ON CA.ORD_NO = E.ORD_NO AND CA.ORD_CHG_SQ = A.ORD_CHG_SQ
 		 WHERE A.ORD_CHG_SQ  = #{ordChgSq}
 		   AND A.CHG_GB = 'G680_30' -- 반품요청
 		   AND B.CHG_STAT IN('G685_33','G685_60')		
@@ -664,4 +664,26 @@
 		 
  
 	</select>			
+	
+	<!-- 회수철회알림톡 정보 조회  -->
+	<select id="getWithdrawInfo" parameterType="Withdraw" resultType="Withdraw">
+		/* TsaWithdraw.getWithdrawInfo */
+		SELECT
+			  D.ORD_NO 
+			, D.CUST_NO 
+			, A.CHGER_PHNNO AS ORD_PHNNO 
+			, A.CHGER_NM    AS ORD_NM 
+			, (SELECT GOODS_NM FROM TB_GOODS WHERE GOODS_CD= MAX(C.GOODS_CD))  AS GOODS_NM
+			, COUNT(C.GOODS_CD) -1 AS GOODS_CNT
+			, CONCAT(A.CHGER_BASE_ADDR,' ', A.CHGER_DTL_ADDR) AS CHGER_BASE_ADDR 
+		  FROM TB_ORDER_CHANGE A
+		  JOIN TB_ORDER_CHANGE_DETAIL B ON A.ORD_CHG_SQ = B.ORD_CHG_SQ 
+		  JOIN TB_ORDER_DETAIL C        ON B.ORD_DTL_NO = C.ORD_DTL_NO 
+		  JOIN TB_ORDER        D        ON C.ORD_NO     = D.ORD_NO 
+		 WHERE A.ORD_CHG_SQ = #{ordChgSq}
+		   AND B.DEL_YN ='N'
+		 GROUP BY D.ORD_NO, D.CUST_NO, D.ORD_PHNNO, D.ORD_NM, A.CHGER_BASE_ADDR, A.CHGER_DTL_ADDR
+		
+	</select>			
+		
 </mapper>

+ 2 - 2
src/main/webapp/WEB-INF/views/board/FaqDetailForm.html

@@ -59,7 +59,7 @@
 						<tr>
 							<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 							<td>
-								<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+								<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 								<span class="infoTxt cBlue marL10"><i class="fa fa-info-circle" aria-hidden="true"></i>TOP 10 노출 순서</span>
 							</td>
 							<th>사용여부<em class="required" title="필수"></em></th>
@@ -125,7 +125,7 @@
 							</td>
 							<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 							<td>
-								<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" th:field="*{dispOrd}"/>
+								<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" th:field="*{dispOrd}"/>
 								<span class="infoTxt cBlue marL10"><i class="fa fa-info-circle" aria-hidden="true"></i>TOP 10 노출 순서</span>
 							</td>
 							<th>조회수</th>

+ 1 - 1
src/main/webapp/WEB-INF/views/business/AflinkForm.html

@@ -123,7 +123,7 @@
 							<tr>
 								<th>표시순서<i class="star"></i></th>
 								<td>
-									<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+									<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 								</td>
 							</tr>
 							<tr>

+ 1 - 1
src/main/webapp/WEB-INF/views/business/BrandForm.html

@@ -130,7 +130,7 @@
 						</td>
 						<th>노출순서<i class="required" title="필수"></i></th>
 						<td class="infoTxt">
-							<input type="text" class="w100 aR" name="dispOrd" maxlength="5" required="required" data-valid-name="노출순서" data-valid-type="numeric"/>
+							<input type="text" class="w100 aR" name="dispOrd" maxlength="4" required="required" data-valid-name="노출순서" data-valid-type="numeric"/>
 						</td>
 						<!-- <th>브랜드명노출언어<i class="required" title="필수"></i></th>
 						<td>

+ 1 - 1
src/main/webapp/WEB-INF/views/customer/GoodsQnaDetailForm.html

@@ -217,7 +217,7 @@
 		var ansSq = $(this).val();
 
 		if (!gagajf.isNull(ansSq)) {
-			var actionUrl = '/customer/qna/answerphase/' + ansSq + '/20';
+			var actionUrl = '/customer/qna/answerphase/' + ansSq + '/G061_21';
 			$.get(actionUrl
 				, function(data) {
 					if (!gagajf.isNull(data.ansSq)) {

+ 1 - 1
src/main/webapp/WEB-INF/views/customer/OneToOneQnaDetailForm.html

@@ -182,7 +182,7 @@
 		var ansSq = $(this).val();
 
 		if (!gagajf.isNull(ansSq)) {
-			var actionUrl = '/customer/qna/answerphase/' + ansSq + '/20';
+			var actionUrl = '/customer/qna/answerphase/' + ansSq + '/G061_20';
 			$.get(actionUrl
 				, function(data) {
 					if (!gagajf.isNull(data.ansSq)) {

+ 3 - 1
src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html

@@ -178,7 +178,7 @@
 	<div class="panelStyle">
 		<ul class="panelBar">
 			<li class="left">
-				<button type="button" id="btnSoldout" class="btn btn-danger btn-lg">품절처리</button>
+				<!--  <button type="button" id="btnSoldout" class="btn btn-danger btn-lg">품절처리</button> -->
 				<!-- <button type="button" id="btnSave" class="btn btn-success btn-lg btnRight" onclick="deliveryInfoSave();">저장</button>
 				<button type="button" id="btnWith" class="btn btn-success btn-lg btnRight">T</button> -->
 			</li>
@@ -215,6 +215,7 @@
 	var roleCd          = [[${sessionInfo.roleCd}]];
 	var currOrdNo       = 0;
 	var columnDefs = [
+		/*
 		{
 			headerName: "결품",
 			field: "soldout",
@@ -227,6 +228,7 @@
 				return (params.data.ordDtlStat == 'G013_20') ? true : false;
 			}
 		},
+		*/
 		{headerName: "지연일",	field: "delvDelayDays", 	width: 70, cellClass: 'text-center'},
 		{headerName: "주문번호",	field: "ordNo", width: 95, cellClass: 'text-center',
 			cellRenderer: function (params) {

+ 1 - 1
src/main/webapp/WEB-INF/views/display/CategoryForm.html

@@ -127,7 +127,7 @@
 					<tr>
 						<th>노출순서<i class="required" title="필수"></i></th>
 						<td>
-							<input type="text" class="aR w100" name="dispOrd" maxlength="5" required="required" data-valid-type="integer" data-valid-name="노출순서"/>
+							<input type="text" class="aR w100" name="dispOrd" maxlength="4" required="required" data-valid-type="integer" data-valid-name="노출순서"/>
 						</td>
 						<th>정상이월구분</th>
 						<td>

+ 3 - 3
src/main/webapp/WEB-INF/views/display/LookbookBannerPopupForm.html

@@ -167,7 +167,7 @@
 		html += '			</td>';
 		html += '			<th>이미지설명</th>';
 		html += '			<td><textarea class="textareaR4" name="imgDesc" id="imgDesc'+bannerIdx+'"></textarea></td>';
-		html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
+		html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center"/>';
 		//html += '			<button type="button" class="btn btn-success btn-lg" onclick="fnAddPicker(this);">피커추가</button>';
 		html += '			<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBanner(this);">삭제</button></td>';
 		html += '		</tr>';*/
@@ -369,7 +369,7 @@
 				html += '			</td>';
 				html += '			<th>이미지설명</th>';
 				html += '			<td><textarea class="textareaR4" name="imgDesc" id="imgDesc'+i+'">'+lookbookBannerList[i].imgDesc+'</textarea></td>';
-				html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+lookbookBannerList[i].dispOrd+'"/>';
+				html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center" value="'+lookbookBannerList[i].dispOrd+'"/>';
 				html += '				<button type="button" class="btn btn-success btn-lg" onclick="fnAddPicker(this);">피커추가</button>';
 				html += '				<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteBanner(this);">삭제</button></td>';
 				html += '		</tr>';*/
@@ -414,7 +414,7 @@
 		html += '			<span id="dpLocAnsContent'+bannerImgRow+'">0</span>/4,000Byte';
 		html += '			</th>';
 		html += '			<td><textarea class="textareaR4" style="resize: none;" name="imgDesc" id="imgDesc'+bannerImgRow+'" onkeyup="cfnGetTextLength(this, 4000, $(\'#dpLocAnsContent\'+'+bannerImgRow+'));" >'+desc+'</textarea></td>';
-		html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+dispord+'"/>';
+		html += '			<td><input name="dispOrd" type="text" class="w80" placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center" value="'+dispord+'"/>';
 		if(imgPath!=''){
 			html += '				<button type="button" class="btn btn-success btn-lg" onclick="fnAddPicker(this,\''+imgPath+'\');">피커추가</button>';
 		}

+ 2 - 2
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -98,7 +98,7 @@
 			html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 			html += fnCreateTimeOption(60, dispEddt[1].split(":")[1]);
 			html += '</select>';
-			html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+result[i].dispOrd+'"/>';
+			html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center" value="'+result[i].dispOrd+'"/>';
 			html += '</td>';
 			if(contentsLoc!='SCM002' && contentsLoc!='SCM003'){
 				html += '<td class="aL">';
@@ -670,7 +670,7 @@
 		html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 		html += fnCreateTimeOption(60,59);
 		html += '</select>\n';
-		html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center"/>\n';
+		html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center"/>\n';
 		html += '</td>\n';
 		html += '<td class="aL">\n';
 		if(contentsLoc!='SCM002' && contentsLoc!='SCM003' && contentsLoc!='SMM011' && contentsLoc!='SBM012' && contentsLoc!='SBMM012' && contentsLoc!='SMM003' && contentsLoc!='SMM004' && contentsLoc!='SMM006'

+ 3 - 3
src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html

@@ -126,7 +126,7 @@
 		html += '			<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 		html += fnCreateTimeOption(60,59);
 		html += '			</select>';
-		html += '			<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
+		html += '			<input name="dispOrd" type="text" class="w80"placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center"/>';
 		html += '		</td>';
 		html += '		<td class="aL cateTypeBtnArea">';
 		html += '		<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
@@ -674,7 +674,7 @@
 			html += '			<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 			html += fnCreateTimeOption(60, dispEddt[1].split(":")[1]);
 			html += '			</select>';
-			html += '			<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+result[i].strTitle3+'"/>';
+			html += '			<input name="dispOrd" type="text" class="w80"placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center" value="'+result[i].strTitle3+'"/>';
 			html += '		</td>';
 			html += '		<td class="aL cateTypeBtnArea">';
 			html += '		<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
@@ -892,7 +892,7 @@
 			html += '			<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 			html += fnCreateTimeOption(60, dispEddt[1].split(":")[1]);
 			html += '			</select>';
-			html += '			<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+result[i].dispOrd+'"/>';
+			html += '			<input name="dispOrd" type="text" class="w80"placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center" value="'+result[i].dispOrd+'"/>';
 			html += '			</td>';
 			html += '			<td class="aL cateTypeBtnArea">';
 			html += '			<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';

+ 2 - 2
src/main/webapp/WEB-INF/views/display/MainMultiContentsPopupForm.html

@@ -98,7 +98,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 			html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 			html += fnCreateTimeOption(60, dispEddt[1].split(":")[1]);
 			html += '</select>';
-			html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" style="margin-left:5px; text-align:center" value="'+result[i].dispOrd+'"/>';
+			html += '<input name="dispOrd" type="text" class="w80"placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center" value="'+result[i].dispOrd+'"/>';
 			html += '</td>';
 			html += '<td class="aL">';
 			if(contentsLoc=='SMM007') {
@@ -340,7 +340,7 @@ console.log('brandGroupNo:'+brandGroupNo);
 		html += '<select name="edTimeMin" required="required" data-valid-name="노출기간 종료시간">';
 		html += fnCreateTimeOption(60, 59);
 		html += '</select>';
-		html += '<input name="dispOrd" type="text" class="w80" placeholder="전시순서" style="margin-left:5px; text-align:center"/>';
+		html += '<input name="dispOrd" type="text" class="w80" placeholder="전시순서" maxlength="4" style="margin-left:5px; text-align:center"/>';
 		html += '</td>';
 		html += '<td class="aL">';
 		if(contentsLoc=='SMM007') {

+ 1 - 1
src/main/webapp/WEB-INF/views/display/PopupListForm.html

@@ -209,7 +209,7 @@
 						</td>
 						<th>우선순위<i class="required" title="필수"></i></th>
 						<td>
-							<input type="text" class="w90" name="dispOrd" id="dispOrd" required="required" data-valid-type=numeric data-valid-name="우선순위"/>
+							<input type="text" class="w90" name="dispOrd" id="dispOrd" maxlength="4" required="required" data-valid-type=numeric data-valid-name="우선순위"/>
 						</td>
 						<th>팝업구분<i class="required" title="필수"></i></th>
 						<td>

+ 1 - 1
src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html

@@ -136,7 +136,7 @@
 						</td>
 						<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 						<td>
-							<input type="text" class="w100 aR" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+							<input type="text" class="w100 aR" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 						</td>
 						<th>사용여부</th>
 						<td>

+ 1 - 1
src/main/webapp/WEB-INF/views/goods/GoodsDetailSizeStockForm.html

@@ -109,7 +109,7 @@
 			<td><input type="text" class="w100p aR" name="addPrice" th:value="${goodsSize.addPrice}"  maxlength="7"  data-valid-type="numeric"/>
 				<input type="hidden" name="hidAddPrice" th:value="${goodsSize.addPrice}" />
 			</td>
-			<td><input type="text" class="w100p aC" name="dispOrd" th:value="${goodsSize.dispOrd}"  maxlength="7" data-valid-type="integer"/>
+			<td><input type="text" class="w100p aC" name="dispOrd" th:value="${goodsSize.dispOrd}"  maxlength="4" data-valid-type="integer"/>
 				<input type="hidden" name="hidDispOrd" th:value="${goodsSize.dispOrd}" />
 			</td>
 			<td><select name="dispYn" class="w100p aC">

+ 1 - 1
src/main/webapp/WEB-INF/views/goods/GoodsSizeInfoForm.html

@@ -102,7 +102,7 @@
 									<tr>
 										<th>노출순서<em class="required" title="필수"></em></th>
 										<td>
-											<input type="text" class="aR w100" name="dispOrd" maxlength="5" required="required" data-valid-type="integer" data-valid-name="노출순서"/>
+											<input type="text" class="aR w100" name="dispOrd" maxlength="4" required="required" data-valid-type="integer" data-valid-name="노출순서"/>
 										</td>
 									</tr>
 									<tr>

+ 1 - 28
src/main/webapp/WEB-INF/views/goods/GoodsWmsIncomelotForm.html

@@ -71,7 +71,7 @@
 		<div class="panelStyle">
 			<ul class="panelBar">
 				<li class="right">
-					<button type="button" class="btn btn-primary btn-lg"  id="btnCreateFreeGoods">사은품 등록</button>
+					
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
 					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
@@ -100,7 +100,6 @@
 /*<![CDATA[*/
 	var sessRoleCd = [[${sessionInfo.roleCd}]];
 	var columnDefs = [
-		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false}, 
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},
 		{headerName: "브랜드명", field: "brandEnm", width: 130, cellClass: 'text-center'},
@@ -279,32 +278,6 @@
 	});
 	
 	
-	// 사은품 등록 클릭시
-	$('#btnCreateFreeGoods').on('click', function() {
-		
-		//선택된 상품
-		var selectedData = gridOptions.api.getSelectedRows();
-		
-		if (selectedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-		
-		mcxDialog.confirm('사은품 등록을 하시겠습니까?', {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function(){
-				var jsonData = JSON.stringify(selectedData);
-				gagajf.ajaxJsonSubmit('/goods/free/goods/save', jsonData, fnCreateFreeGoodsCollback);
-			}
-		});
-	});
-	
-	var fnCreateFreeGoodsCollback = function(result){
-		fnGoodsWmsIncomelotListSearch('BASIC');
-	}
-	
-	
 	$(document).ready(function() {
 
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일');

+ 28 - 0
src/main/webapp/WEB-INF/views/goods/GoodsWmsIncomelotSkuForm.html

@@ -70,6 +70,7 @@
 		<div class="panelStyle">
 			<ul class="panelBar">
 				<li class="right">
+					<button type="button" class="btn btn-primary btn-lg"  id="btnCreateFreeGoods">사은품 등록</button>
 					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
 					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
 					<select id="pageSize" name="pageSize">
@@ -98,6 +99,7 @@
 /*<![CDATA[*/
 	var sessRoleCd = [[${sessionInfo.roleCd}]];
 	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-right', headerCheckboxSelection: true, checkboxSelection: true, filter: false}, 
 		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
 		{headerName: "입고번호", field: "lotno", width: 100, cellClass: 'text-center'},
 		{headerName: "브랜드", field: "brandCd", width: 100, cellClass: 'text-center'},
@@ -247,6 +249,32 @@
 		cfnCreateCombo(actionUrl, $('#goodsWmsIncomelotForm select[name=brandCd]'), "[전체]", "");
 	});
 	
+	// 사은품 등록 클릭시
+	$('#btnCreateFreeGoods').on('click', function() {
+		
+		//선택된 상품
+		var selectedData = gridOptions.api.getSelectedRows();
+		
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		
+		mcxDialog.confirm('사은품 등록을 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var jsonData = JSON.stringify(selectedData);
+				gagajf.ajaxJsonSubmit('/goods/free/goods/save', jsonData, fnCreateFreeGoodsCollback);
+			}
+		});
+	});
+	
+	var fnCreateFreeGoodsCollback = function(result){
+		
+	}
+	
+	
 	$(document).ready(function() {
 
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '등록일');

+ 11 - 1
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -110,7 +110,7 @@
 										<tr class="serialCpnArea" style="display:none;">
 											<th>시리얼쿠폰키워드<em class="required" title="필수"></em></th>
 											<td>
-												<input type="text" name="serialCpnNm" class="w300" maxlength="10" data-valid-name="시리얼쿠폰키워드">
+												<input type="text" name="serialCpnNm" id="serialCpnNm" class="w300" maxlength="10" data-valid-name="시리얼쿠폰키워드">
 											</td>
 											<th>시리얼쿠폰발급수량<em class="required" title="필수"></em></th>
 											<td>
@@ -3179,6 +3179,16 @@
 		}
 	});
 
+	// 시리얼 쿠폰 사용
+	$("#serialCpnNm").bind("keyup",function(){
+		re = /[~!@\#$%^&*\()\-=+_']/gi;
+		var temp=$("#serialCpnNm").val();
+		if(re.test(temp)){ //특수문자가 포함되면 삭제하여 값으로 다시셋팅
+			$("#serialCpnNm").val(temp.replace(re,""));
+		}
+		$("#serialCpnNm").val($("#serialCpnNm").val().replaceAll(" ", ""));
+	});
+
 	/*]]>*/
 </script>
 </html>

+ 12 - 9
src/main/webapp/WEB-INF/views/marketing/PlanDetailPopupForm.html

@@ -72,7 +72,7 @@
 						</td>
 						<th>전시순서</th>
 						<td>
-							<input type="text" name="dispOrd" class="w100 aR" th:value="*{dispOrd}"/>
+							<input type="text" name="dispOrd" class="w100 aR" th:value="*{dispOrd}" maxlength="4"/>
 						</td>
 					</tr>
 					<tr>
@@ -477,7 +477,7 @@
 						</td>
 						<th>전시순서</th>
 						<td>
-							<input type="text" class="w100 aR" name="dispOrd"/>
+							<input type="text" class="w100 aR" name="dispOrd" maxlength="4"/>
 						</td>
 					</tr>
 					<tr>
@@ -1109,14 +1109,17 @@
 			return;
 		}
 
-		if (Number(stDate) < Number(toDate) && mode == 'N') {
-			mcxDialog.alert('시작일자는 오늘포함 이후로 등록해주세요.');
-			return;
-		}
+		// 21-07-21 출석체크에서는 오늘포함 체크하지 않도록 수정 요청 들어와 수정
+		if($('#planRegisterForm select[name="planGb"] option:selected').val() != 'C'){
+			if (Number(stDate) < Number(toDate) && mode == 'N') {
+				mcxDialog.alert('시작일자는 오늘포함 이후로 등록해주세요.');
+				return;
+			}
 
-		if (Number(edDate) < Number(toDate) && mode == 'N') {
-			mcxDialog.alert('종료일자는 오늘포함 이후로 등록해주세요.');
-			return;
+			if (Number(edDate) < Number(toDate) && mode == 'N') {
+				mcxDialog.alert('종료일자는 오늘포함 이후로 등록해주세요.');
+				return;
+			}
 		}
 		
 		if (newCustYn == "Y") {

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

@@ -772,7 +772,7 @@
 	}
 
 	function chkChar(obj){
-	    var RegExp = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+┼<>@\#$%&\'\"\\\(\=]/gi;	//정규식 구문
+	    var RegExp = /[\{\}\[\]\/;:|\)*`^\-_+┼<>@\#$%&\'\"\\\(\=]/gi;	//정규식 구문
 	    if (RegExp.test(obj.value)) {
 	      // 특수문자 모두 제거    
 	      obj.value = obj.value.replace(RegExp , '');

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

@@ -135,9 +135,9 @@
 							</td>
 						</tr>
 						<tr>
-							<th>요청메모</th>
+							<th>요청메모<br/><span id="dpLocAnsContent">0</span>/1,000Byte</th>
 							<td colspan="5">
-								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" onkeyup="cfnGetTextLength(this, 1000, $('#dpLocAnsContent'));"></textarea>
 							</td>
 						</tr>
 					</tbody>

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

@@ -36,7 +36,9 @@
 				
 				<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="${chgStat == 'G685_20' or chgStat == 'G685_21' or (recallExceptionInfo != null and (chgStat == 'G685_30' or chgStat == 'G685_31'))}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button>
+					<!-- 2021.07.22 택배사 회수 불가 시 회수요청상태에서 교환철회 처리 -->
+					<!-- <button type="button" class="btn btn-success" th:if="${chgStat == 'G685_20' or chgStat == 'G685_21' or (recallExceptionInfo != null and (chgStat == 'G685_30' or chgStat == 'G685_31'))}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button> -->
+					<button type="button" class="btn btn-success" th:if="${chgStat == 'G685_20' or chgStat == 'G685_21' or chgStat == 'G685_30' or (recallExceptionInfo != null and chgStat == 'G685_31')}" id="fnExchangeCancelRequestSubmit" onclick="fnExchangeCancel()">교환철회</button>
 					<button type="button" class="btn btn-success" th:if="${ordChgSq > 0 and (ordChgGb == 'G681_20' or ordChgGb == 'G681_40')}" id="fnReturnToExchangeSubmit" onclick="fnExchange()">교환변경</button>
 				</div>
 				
@@ -78,9 +80,9 @@
 							<td id="addDelvFee" colspan="3"></td>
 						</tr>
 						<tr>
-							<th>요청메모</th>
+							<th>요청메모<br/><span id="chgMemoCount">0</span>/1,000Byte</th>
 							<td colspan="5">
-								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="교환사유를 300자내외로 작성해 주세요"></textarea>
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" onkeyup="cfnGetTextLength(this, 1000, $('#chgMemoCount'));"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -130,9 +132,9 @@
 							</td>
 						</tr>
 						<tr>
-							<th>반품메모</th>
+							<th>반품메모<br/><span id="chgerRtnMemoCount">0</span>/1,000Byte</th>
 							<td colspan="3">
-								<textarea id="chgerRtnMemo" name="chgerRtnMemo" style="height:80px;" placeholder="반품메모(수거시요청사항)를 300자내외로 작성해 주세요"></textarea>
+								<textarea id="chgerRtnMemo" name="chgerRtnMemo" style="height:80px;" onkeyup="cfnGetTextLength(this, 1000, $('#chgerRtnMemoCount'));"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -182,9 +184,9 @@
 						</td>
 					</tr>
 					<tr>
-						<th>배송메모</th>
+						<th>배송메모<br/><span id="delvMemoCount">0</span>/1,000Byte</th>
 						<td colspan="3">
-							<textarea id="delvMemo" name="delvMemo" style="height:80px;" placeholder="배송메모를 300자내외로 작성해 주세요"></textarea>
+							<textarea id="delvMemo" name="delvMemo" style="height:80px;" onkeyup="cfnGetTextLength(this, 1000, $('#delvMemoCount'));"></textarea>
 						</td>
 					</tr>
 					</tbody>
@@ -254,8 +256,8 @@ var columnExchangeReqList = [
 			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
 			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
 			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
-			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center'},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center'},
 			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
 		]
 	},
@@ -263,14 +265,14 @@ var columnExchangeReqList = [
 		headerName	: "주문상세단품정보",
 		children	: [
 			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
-			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
-			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
-			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center'},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center'},
+			{headerName: "옵션1"			, field: "optCd1"			, width: 60		, cellClass: 'text-center'},
+			{headerName: "옵션2"			, field: "optCd2"			, width: 60		, cellClass: 'text-center'},
 			{
 				headerName		: "단품수량"
 				, field			: "itemQty"
-				, width			: 80
+				, width			: 60
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -288,7 +290,7 @@ var columnExchangeReqList = [
 			{
 				headerName		: "단품옵션금액"
 				, field			: "optAddPrice"
-				, width			: 80
+				, width			: 90
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -302,7 +304,7 @@ var columnExchangeReqList = [
 			{
 				headerName		: "주문"
 				, field			: "ordQty"
-				, width			: 80
+				, width			: 70
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -311,7 +313,7 @@ var columnExchangeReqList = [
 			{
 				headerName		: "취소/요청"
 				, field			: "cnclRtnQty"
-				, width			: 80
+				, width			: 70
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
@@ -585,6 +587,7 @@ var columnDelvCdList = [
 		, cellRenderer	: function (params) {
 			return params.value.addComma();
 		}
+		, hide			: true
 	},
 	{headerName: "반품지명"		, field: "rtnLocNm"			, width: 100	, cellClass: 'text-center'},
 	{headerName: "반품지전화번호"	, field: "rtnLocTelno"		, width: 100	, cellClass: 'text-center'},
@@ -703,20 +706,39 @@ var fnExchange = function () {
 	}
 
 	// 5. 회수지정보설정
+	var chgerNm			= "";
+	var chgerZipcode	= "";
+	var chgerBaseAddr	= "";
+	var chgerDtlAddr	= "";
+	
+	var chgerPhnno1		= "";
+	var chgerPhnno2		= "";
+	var chgerPhnno3		= "";
+	
+	var chgerTelno1		= "";
+	var chgerTelno2		= "";
+	var chgerTelno3		= "";
+	
+	var chgerPhnno 		= "";
+	var chgerTelno 		= "";
+	var chgerEmail 		= "";
+	var chgerRtnMemo	= "";
+
 	if (wdGb == 'W') {
-		var chgerNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
-		var chgerZipcode	= $("#exchangeRequestFrm input[name=chgerZipcode]").val();
-		var chgerBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
-		var chgerDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
+		chgerNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
+		chgerZipcode	= $("#exchangeRequestFrm input[name=chgerZipcode]").val();
+		chgerBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
+		chgerDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
 		
-		var chgerPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
-		var chgerPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
-		var chgerPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
+		chgerPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
+		chgerPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
+		chgerPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
 		
-		var chgerTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
-		var chgerTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
-		var chgerTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
-	
+		chgerTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
+		chgerTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
+		chgerTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
+
+		chgerRtnMemo	= $("#exchangeRequestFrm textarea[name=chgerRtnMemo]").val();
 		if (gagajf.isNull(chgerZipcode)) {
 			mcxDialog.alert("회수지주소를 입력하세요."); return;
 		}
@@ -737,9 +759,8 @@ var fnExchange = function () {
 			mcxDialog.alert("휴대전화를 입력하세요."); return;
 		}
 	
-		var chgerPhnno 		= chgerPhnno1 + '-' + chgerPhnno2 + '-' + chgerPhnno3;
-		var chgerEmail 		= orderInfoList[0].ordEmail;
-		var chgerTelno;
+		chgerPhnno 		= chgerPhnno1 + '-' + chgerPhnno2 + '-' + chgerPhnno3;
+		chgerEmail 		= orderInfoList[0].ordEmail;
 		if (gagajf.isNull(chgerTelno1) && gagajf.isNull(chgerTelno2) && gagajf.isNull(chgerTelno3)) {
 			chgerTelno 		= '';
 		} else {
@@ -808,7 +829,7 @@ var fnExchange = function () {
 		,"chgerDtlAddr"		: chgerDtlAddr
 		,"chgerPhnno"		: chgerPhnno
 		,"chgerTelno"		: chgerTelno
-		,"chgerRtnMemo"		: $("#exchangeRequestFrm textarea[name=chgerRtnMemo]").val()
+		,"chgerRtnMemo"		: chgerRtnMemo
 		,"recipNm"			: recipNm
 		,"recipEmail"		: recipEmail
 		,"recipZipcode"		: recipZipcode
@@ -987,7 +1008,7 @@ var fnChangeOption = function(param) {
 		}
 	});
 
-	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+	//gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
 }
 
 // 교환수량 변경 이벤트
@@ -998,7 +1019,7 @@ var fnChangeQty = function(param) {
 
 	$.each(cancelRequestTargetList, function(idx, item){
 		if (item.ordDtlNo == ordDtlNo) {
-			if (gagajf.isNull(item.ordChgOpt)) {
+			if (gagajf.isNull(item.ordChgOpt) && chgQty > 0) {
 				mcxDialog.alert('교환옵션을 선택해주세요.');
 				return false;
 			}
@@ -1021,7 +1042,7 @@ var fnChangeQty = function(param) {
 	// 교환대상목록 설정
 	exchangeRequestList = exchangeRequestTargetList;
 
-	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+	//gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
 }
 
 // 추가배송비 설정

+ 4 - 4
src/main/webapp/WEB-INF/views/order/OrderDetailCouponHst.html

@@ -44,7 +44,7 @@ var columnDefsOrderCouponInfo = [
 		headerName			: "웹 할인금액/율"
 		, field				: "dcPval"
 		, width				: 120
-		, cellClass			: 'text-center'
+		, cellClass			: 'text-right'
 		, valueFormatter	: function(params) {
 			return (params.data.dcWay == 'G240_10') ? params.value.addComma() + '원' : params.value.addComma() + '%';}	
 	},
@@ -52,7 +52,7 @@ var columnDefsOrderCouponInfo = [
 		headerName			: "모바일 할인금액/율"
 		, field				: "dcMval"
 		, width				: 120
-		, cellClass			: 'text-center'
+		, cellClass			: 'text-right'
 		, valueFormatter	: function(params) {
 			return (params.data.dcWay == 'G240_10') ? params.value.addComma() + '원' : params.value.addComma() + '%';
 		}	
@@ -61,7 +61,7 @@ var columnDefsOrderCouponInfo = [
 		headerName			: "판매상품가격"
 		, field				: "ordAmt"
 		, width				: 100
-		, cellClass			: 'text-center'
+		, cellClass			: 'text-right'
 		, valueFormatter	: function(params) {
 			return params.value.addComma();
 		}	
@@ -70,7 +70,7 @@ var columnDefsOrderCouponInfo = [
 		headerName			: "실할인금액"
 		, field				: "cpnDcAmt"
 		, width				: 100
-		, cellClass			: 'text-center'
+		, cellClass			: 'text-right'
 		, valueFormatter	: function(params) {
 			return params.value.addComma();
 		}	

+ 8 - 3
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -782,8 +782,8 @@ var columnDefsOrderChangeInfo = [
 	},
 	{headerName: "요청상태"		, field: "chgStatNm"	, width: 100	, cellClass: 'text-center'},
 	{headerName: "상품코드"		, field: "goodsCd"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "옵션1"			, field: "colorNm"		, width: 100	, cellClass: 'text-center'},
-	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "옵션1"			, field: "colorNm"		, width: 100	, cellClass: 'text-center', hide : true},
+	{headerName: "옵션2"			, field: "optCd2"		, width: 100	, cellClass: 'text-center', hide : true},
 	{headerName: "수량"			, field: "chgQty"		, width: 100	, cellClass: 'text-center'},
 	{
 		headerName		: "요청일자"		
@@ -798,7 +798,12 @@ var columnDefsOrderChangeInfo = [
 	{
 		headerName: "회수구분", field: "wdGb", width: 100, cellClass: 'text-center',
 		cellRenderer: function (params) {
-			return params.value == 'W' ? '회수요청' : '직접배송'; 
+			var rtnStr = "";
+			if (params.data.chgGb == 'G680_30' || params.data.chgGb == 'G680_40') {
+				rtnStr = params.value == 'W' ? '회수요청' : '직접배송';
+			}
+
+			return rtnStr;
 		}
 	},
 	{headerName: "요청메모"		, field: "chgMemo"		, width: 150	, cellClass: 'text-left'},

+ 4 - 4
src/main/webapp/WEB-INF/views/order/OrderDetailGiftcardHst.html

@@ -41,7 +41,7 @@ var columnDefsOrderGiftcardInfo = [
 			headerName			: "상품권승인금액"
 			, field				: "chgGfcdAmt"
 			, width				: 130
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	
@@ -50,7 +50,7 @@ var columnDefsOrderGiftcardInfo = [
 			headerName			: "상품권사용금액"
 			, field				: "usGfcdAmt"
 			, width				: 130
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	
@@ -59,7 +59,7 @@ var columnDefsOrderGiftcardInfo = [
 			headerName			: "상품권남은금액"
 			, field				: "rmGfcdAmt"
 			, width				: 130
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	
@@ -70,7 +70,7 @@ var columnDefsOrderGiftcardInfo = [
 			headerName			: "상품권사용금액"
 			, field				: "gfcdAmt"
 			, width				: 130
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	

+ 5 - 5
src/main/webapp/WEB-INF/views/order/OrderDetailPointHst.html

@@ -35,14 +35,14 @@ var orderPointHstList = [[${orderPointHstList}]];
 
 // specify the columns
 var columnDefsOrderPointInfo = [
-		{headerName: "상품코드", 		field: "goodsCd", 		width: 100, cellClass: 'text-center'},
-		{headerName: "적립율(PC)", 	field: "pntPrate", 		width: 100, cellClass: 'text-center'},
+		{headerName: "상품코드", 			field: "goodsCd", 		width: 100, cellClass: 'text-center'},
+		{headerName: "적립율(PC)", 		field: "pntPrate", 		width: 100, cellClass: 'text-center'},
 		{headerName: "적립율(모바일)", 	field: "pntMrate", 		width: 100, cellClass: 'text-center'},
 		{
 			headerName			: "판매상품가격"
 			, field				: "currPrice"
 			, width				: 120
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	
@@ -51,7 +51,7 @@ var columnDefsOrderPointInfo = [
 			headerName			: "실결제상품가격"
 			, field				: "realOrdAmt"
 			, width				: 140
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	
@@ -60,7 +60,7 @@ var columnDefsOrderPointInfo = [
 			headerName			: "사용포인트"
 			, field				: "pntAmt"
 			, width				: 100
-			, cellClass			: 'text-center'
+			, cellClass			: 'text-right'
 			, valueFormatter	: function(params) {
 				return params.value.addComma();
 			}	

+ 51 - 14
src/main/webapp/WEB-INF/views/order/RtnReqForm.html

@@ -34,10 +34,15 @@
 
 				<h4 id="h4OrderCancelRequestToBeList">반품정보</h4>
 				<div id="gridOrderCancelRequestToBeList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
-				
-				<h4 id="h4DelvCdList">배송비정보</h4>
-				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
-				
+
+				<div id="delvCdList">
+					<h4>배송정보</h4>
+					<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+				</div>
+
+				<h4 id="h4DelvInfoList">배송비정보</h4>
+				<div id="gridDelvInfoList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
+
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
 					<button type="button" class="btn btn-success" id="rtnReqBtn" onclick="fnCnclReq('rtnReq');">반품신청</button>
 					<button type="button" class="btn btn-success" id="rtnReqCancelBtn" onclick="fnCnclReq('rtnReqCancel');">반품철회</button>
@@ -72,9 +77,9 @@
 							<td><span id="imputeReason"></span></td>
 						</tr>
 						<tr>
-							<th>요청메모</th>
+							<th>요청메모<br/><span id="chgMemoCount">0</span>/1,000Byte</th>
 							<td colspan="5">
-								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="취소사유를 300자내외로 작성해 주세요"></textarea>
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" onkeyup="cfnGetTextLength(this, 1000, $('#chgMemoCount'));"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -182,9 +187,9 @@
 								</td>
 							</tr>
 							<tr>
-								<th>반품메모</th>
+								<th>반품메모<br/><span id="chgerRtnMemoCount">0</span>/1,000Byte</th>
 								<td colspan="3">
-									<textarea id="chgerRtnMemo" name="chgerRtnMemo" style="height:80px;" placeholder="반품메모(수거시요청사항)를 300자내외로 작성해 주세요"></textarea>
+									<textarea id="chgerRtnMemo" name="chgerRtnMemo" style="height:80px;" onkeyup="cfnGetTextLength(this, 1000, $('#chgerRtnMemoCount'));"></textarea>
 								</td>
 							</tr>
 						</tbody>
@@ -245,6 +250,7 @@ var orderDelvRtnAddrInfo	= [[${orderDelvRtnAddrInfo}]];					// 회수지정보
 var orderChangeDetailList 	= [[${orderChangeDetailList}]];					// 취소/반품/교환요청 정보
 var chgStat					= [[${chgStat}]];								// 변경상태
 var recallExceptionInfo		= [[${recallExceptionInfo}]];					// 회수 예외 정보
+var rtnLocInfo				= [[${rtnLocInfo}]];							// 반송지주소정보
 var payGb 					= orderInfoList[0].payGb;						// 결제수단
 var payMeans 				= orderInfoList[0].payMeans;					// 결제방법
 var pgGb					= orderInfoList[0].pgGb;						// PG구분
@@ -756,7 +762,7 @@ var columnCancelReqToBeList = [
 var gridOptionsCancelReqToBeList = gagaAgGrid.getGridOptions(columnCancelReqToBeList);
 
 // 3. 배송비정보(환불정보)
-var columnDelvCdList = [
+var columnDelvInfoList = [
 	{
 		headerName	: "배송코드기준금액",
 		children	: [
@@ -859,6 +865,28 @@ var columnDelvCdList = [
 		]
 	}
 ];
+var gridOptionsDelvInfoList = gagaAgGrid.getGridOptions(columnDelvInfoList);
+
+// 3. 배송정보(환불정보)
+var columnDelvCdList = [
+	{headerName: "업체"			, field: "supplyCompNm"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center'},
+	{
+		headerName		: "추가배송비"
+		, field			: "addDelvFee"
+		, width			: 100
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: true
+	},
+	{headerName: "반품지명"		, field: "rtnLocNm"			, width: 100	, cellClass: 'text-center'},
+	{headerName: "반품지전화번호"	, field: "rtnLocTelno"		, width: 100	, cellClass: 'text-center'},
+	{headerName: "반품지우편번호"	, field: "rtnLocZipcode"	, width: 100	, cellClass: 'text-center'},
+	{headerName: "반품지기본주소"	, field: "rtnLocBaseAddr"	, width: 300	, cellClass: 'text-center'},
+	{headerName: "반품지상세주소"	, field: "rtnLocDtlAddr"	, width: 300	, cellClass: 'text-center'},
+];
 var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 </script>
 
@@ -944,7 +972,7 @@ var fnCalculateRefundAmt = function (obj) {
 			});
 			
 			gridOptionsCancelReqToBeList.api.setRowData(result.cancelOrderRefundList);
-			gridOptionsDelvCdList.api.setRowData(result.cancelDelvRefundList);
+			gridOptionsDelvInfoList.api.setRowData(result.cancelDelvRefundList);
 			
 			let spanSumDeliveryFee = result.spanSumDeliveryFee - result.spanDelvCpnDcAmt;
 			let sumDeliveryFee = result.sumDeliveryFee - result.spanRefundDelvCpnAmt;
@@ -1342,8 +1370,10 @@ var fnChangeWdGb = function(param) {
 	// 회수지정보 히든 처리
 	if (wdGb == 'D') {
 		$('#chgerAddress').css('display', 'none');
+		$('#delvCdList').css('display', '');
 	} else {
 		$('#chgerAddress').css('display', '');
+		$('#delvCdList').css('display', 'none');
 	}
 	
 	// 환불예정금액 계산
@@ -1438,9 +1468,11 @@ $(document).ready(function() {
 	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
 	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gagaAgGrid.createGrid('gridDelvInfoList'				, gridOptionsDelvInfoList);				// 배송비정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송정보
 	
 	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
+	gridOptionsDelvCdList.api.setRowData(rtnLocInfo);
 	
 	// 1.1 TOTAL ROWS 없애기
 	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
@@ -1452,6 +1484,7 @@ $(document).ready(function() {
 		$('input:radio[name="wdGb"]:radio[value="D"]').prop('checked', true);
 	} else {
 		$('input:radio[name="wdGb"]:radio[value="W"]').prop('checked', true);
+		$('#delvCdList').css('display', 'none');
 	}
 	
 	// 3. 무통장입금아닐때 환불계좌 목록 숨김처리
@@ -1470,7 +1503,9 @@ $(document).ready(function() {
 		
 		// 2021.05.25 반품접수, 반품대기 상태에서만 철회가능
 		// 2021.07.13 회수예외정보가 있고 회수요청, 상품검수중 상태에서 철회 가능 처리
-		if (chgStat != "G685_50" && chgStat != "G685_51" && (recallExceptionInfo == null || (chgStat != "G685_30" && chgStat != 'G685_31'))) {
+		// 2021.07.22 택배사 회수 불가 시 회수요청상태에서 반품철회 처리
+		//if (chgStat != "G685_50" && chgStat != "G685_51" && (recallExceptionInfo == null || (chgStat != "G685_30" && chgStat != 'G685_31'))) {
+		if (chgStat != "G685_50" && chgStat != "G685_51" && chgStat != "G685_30" && (recallExceptionInfo == null || chgStat != 'G685_31')) {
 			$("#rtnReqCancelBtn").css("display", "none");
 		}
 		
@@ -1490,6 +1525,8 @@ $(document).ready(function() {
 		// 직접발송일때 회수지정보 숨김처리
 		if (wdGb == "D") {
 			$("#chgerAddress").css("display", "none");
+		} else {
+			$('#delvCdList').css('display', 'none');
 		}
 	} else {
 		$("#rtnReqCompleteBtn").css("display", "none");
@@ -1512,8 +1549,8 @@ $(document).ready(function() {
 	if (temp3) {
 		$("#h4OrderCancelRequestToBeList").css("display"	, "none");
 		$("#gridOrderCancelRequestToBeList").css("display"	, "none");
-		$("#h4DelvCdList").css("display"					, "none");
-		$("#gridDelvCdList").css("display"					, "none");
+		$("#h4DelvInfoList").css("display"					, "none");
+		$("#gridDelvInfoList").css("display"				, "none");
 	}
 	
 	// 7. 환불예상금액계산

+ 4 - 1
src/main/webapp/WEB-INF/views/shoplinker/ShoplinkerGoodsSendForm.html

@@ -158,7 +158,10 @@
 		{headerName: "IF결과", field: "apiResult", width: 100, cellClass: 'text-center',
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(procGbValue, params.value); }
 		},
-		{headerName: "IF결과메세지", field: "apiMessage", width: 300, cellClass: 'text-left'},
+		{
+			headerName: "IF결과메세지", field: "apiMessage", width: 300, cellClass: 'text-left',
+			cellRenderer: function (params) { return params.value}
+		},
 		{headerName: "자사 상품코드", field: "goodsCd", width: 150, cellClass: 'text-center'},
 		{headerName: "옵션코드", field: "optCd", width: 150, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 300, cellClass: 'text-left'

+ 1 - 1
src/main/webapp/WEB-INF/views/system/CommoncodeForm.html

@@ -91,7 +91,7 @@
 							<tr>
 								<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 								<td>
-									<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+									<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 								</td>
 							</tr>
 							<tr>

+ 2 - 2
src/main/webapp/WEB-INF/views/system/MenuForm.html

@@ -153,7 +153,7 @@
 								<tr>
 									<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
-										<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+										<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 									</td>
 									<th>사용여부</th>
 									<td>
@@ -251,7 +251,7 @@
 								<tr>
 									<th>표시순서<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>
-										<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="5" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
+										<input type="text" class="w100 text-right" name="dispOrd" placeholder="" maxlength="4" required="required" data-valid-type="numeric" data-valid-name="표시순서" />
 									</td>
 									<th>사용여부<i class="required" title="필수" aria-hidden="true"></i></th>
 									<td>

+ 71 - 5
src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html

@@ -211,9 +211,9 @@
 			}			
 		},
 		{headerName: "회수상태", 		field: "wdShipStateNm", width: 120, cellClass: "text-center"},
-		{headerName: "회수상태수신일시", field: "wdStateDt", 	width: 120, cellClass: "text-center"},
+		{headerName: "회수상태수신일시", field: "wdStateDt", 		width: 120, cellClass: "text-center"},
 		{headerName: "미회수사유", 		field: "wdReasonCdNm", 	width: 100, cellClass: "text-center"},
-		{headerName: "재회수지시", 		field: "wdShipState", 		width: 100,	cellClass: 'text-center',
+		{headerName: "재회수지시", 		field: "wdShipState", 	width: 100,	cellClass: 'text-center',
 			cellRenderer: function(params) {
 				return params.value == '12' && params.data.chgStat == 'G685_30' ? '<button type="button" class="btn btn-base btn-sm" onclick="fnReRecallOrder(\'' + params.data.chgGb + '\',\'' + params.data.ordDtlNo + '\',\''+params.data.ordChgSq+'\',\''+params.data.ordNo+'\');">&nbsp;재회수지시&nbsp;</button>' : "";
 			}
@@ -222,14 +222,27 @@
 		{headerName: "배송시작일시", 	field: "wdStdt", 		width: 120, cellClass: "text-center"},
 		{headerName: "배송종료일시", 	field: "wdEddt", 		width: 120, cellClass: "text-center"},
 		{headerName: "수취인명", 		field: "recipNm", 		width: 120, cellClass: "text-center"},
-		
+		{headerName: "알림톡", 			field: "", 				width: 140, cellClass: "text-center",
+			cellRenderer: function(params) {
+				if (params.data.wdShipState == '12' && params.data.chgStat == 'G685_30') {
+					
+					var paramData 	= params.data.ordChgSq;
+					paramData 		+= '@' + params.data.wdReasonCd;
+					paramData 		+= '@' + params.data.chgGb;
+					
+					if(params.data.chgGb == 'G680_30'){ // 반품요청 
+						return '<button type="button" class="btn btn-base btn-sm" onclick="fnKaKao(\'' + paramData + '\');">&nbsp;반품철회알림톡&nbsp;</button>';
+					} else if(params.data.chgGb == 'G680_40'){ // 교환요청 
+						return '<button type="button" class="btn btn-base btn-sm" onclick="fnKaKao(\'' + paramData + '\');">&nbsp;교환철회알림톡&nbsp;</button>';
+					}
+				}
+			}
+		},
 		{headerName: "LMS", 			field: "maskingChgerPhnno", 	width: 80, cellClass: "text-center",
 			cellRenderer: function(params) {
 				return '<button type="button" class="btn btn-base btn-sm" onclick="fnLms(\'' + params.data.chgerPhnno + '\',\'' + params.data.custNo + '\');">&nbsp;LMS&nbsp;</button>';
 			}			
 		},
-		
-		
 		{headerName: "보내시는분", 			field: "maskingChgerNm", 		width: 100, cellClass: "text-center"},
 		{headerName: "반품회수지휴대전화", 	field: "maskingChgerPhnno", 	width: 120, cellClass: "text-center"},
 		{headerName: "반품회수지우편번호", 	field: "chgerZipcode", 			width: 120, cellClass: "text-center"},
@@ -354,6 +367,59 @@
 		});
 	}
 
+	
+	
+	/*************************************************************************
+	*  KAKAO(알림톡)
+	**************************************************************************/	
+	var fnKaKao = function(paramData){
+
+		var param  = "";
+		var msg    = "";
+		var gubun  = "";
+		var paramArr = paramData.split("@");
+
+		var ordChgSq	= paramArr[0];
+		var wdReasonCd  = paramArr[1];
+		var chgGb       = paramArr[2];
+
+		if(chgGb == "G680_30"){ // 반품 
+			if(wdReasonCd == "18" || wdReasonCd == "14" || wdReasonCd == "16" || wdReasonCd == "25"){ // 고객부재 
+				gubun = "RETURN_CANCEL_CUSTOMER";
+			} else if(wdReasonCd == "21" ){ // 고객정보(주소) 오류 
+				gubun = "RETURN_CANCEL_ADDR";
+			}
+			msg = "반품 철회 알림톡 발송 하시겠습니까?";
+			
+		} else if(chgGb == "G680_40"){ // 교환 
+			if(wdReasonCd == "18" || wdReasonCd == "14" || wdReasonCd == "16" || wdReasonCd == "25"){ // 고객부재 
+				gubun = "EXCHANGE_CANCEL_CUSTOMER";
+			} else if(wdReasonCd == "21" ){ // 고객정보(주소) 오류 
+				gubun = "EXCHANGE_CANCEL_ADDR";
+			}
+			msg = "교환 철회 알림톡 발송 하시겠습니까?";
+		}
+
+		if(gubun == ""){
+			mcxDialog.alert('알림톡 대상이 아닙니다.');
+			return false;
+		}
+
+		mcxDialog.confirm(msg, {
+		    cancelBtnText: "취소",
+		    sureBtnText: "확인",
+		    sureBtnClick: function() {
+	            var param = new Object;
+	            param.ordChgSq   = ordChgSq;
+	            param.gubun      = gubun;
+	            
+	            var jsonData = JSON.stringify(param);
+	            gagajf.ajaxJsonSubmit('/withdraw/direct/recallCancel', jsonData, "");
+	        }
+		});
+	}
+	
+	
 	/*************************************************************************
 	*  LMS
 	**************************************************************************/