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

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

# Conflicts:
#	src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
xodud1202 5 лет назад
Родитель
Сommit
f94a779e0a
53 измененных файлов с 1646 добавлено и 622 удалено
  1. 17 4
      src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java
  2. 28 0
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  3. 3 4
      src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java
  4. 27 49
      src/main/java/com/style24/admin/biz/service/TsaCouponService.java
  5. 29 0
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  6. 8 22
      src/main/java/com/style24/admin/biz/service/TsaMarketingService.java
  7. 57 43
      src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  8. 246 1
      src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java
  9. 1 1
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  10. 47 0
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  11. 16 1
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  12. 9 9
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  13. 134 144
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  14. 66 18
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  15. 2 2
      src/main/java/com/style24/admin/biz/web/TsaOrderController.java
  16. 0 1
      src/main/java/com/style24/admin/biz/web/TsaPgController.java
  17. 2 2
      src/main/java/com/style24/admin/biz/web/TsaStockController.java
  18. 0 123
      src/main/java/com/style24/persistence/TsaPageRequest.java
  19. 3 14
      src/main/java/com/style24/persistence/domain/Coupon.java
  20. 32 0
      src/main/java/com/style24/persistence/domain/CustomerSearch.java
  21. 0 1
      src/main/java/com/style24/persistence/domain/Delivery.java
  22. 2 2
      src/main/java/com/style24/persistence/domain/FreeGoodsPromotion.java
  23. 0 4
      src/main/java/com/style24/persistence/domain/FreeGoodsSectionVal.java
  24. 7 4
      src/main/java/com/style24/persistence/domain/Goods.java
  25. 2 2
      src/main/java/com/style24/persistence/domain/GoodsSearch.java
  26. 5 12
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  27. 2 2
      src/main/java/com/style24/persistence/domain/MoreBetterBurden.java
  28. 4 6
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  29. 2 2
      src/main/java/com/style24/persistence/domain/MoreBetterSection.java
  30. 4 2
      src/main/java/com/style24/persistence/domain/Order.java
  31. 1 0
      src/main/java/com/style24/persistence/domain/SupplyCompany.java
  32. 2 2
      src/main/java/com/style24/persistence/domain/WmsGoods.java
  33. 12 7
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  34. 33 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  35. 108 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  36. 1 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  37. 7 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaOrder.xml
  38. 7 8
      src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml
  39. 1 1
      src/main/webapp/WEB-INF/views/business/BrandSearchPopupForm.html
  40. 265 0
      src/main/webapp/WEB-INF/views/customer/CustomerActiveListForm.html
  41. 93 21
      src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html
  42. 2 3
      src/main/webapp/WEB-INF/views/envset/CustomerGradePolicyForm.html
  43. 9 5
      src/main/webapp/WEB-INF/views/marketing/CouponCreatePopupForm.html
  44. 7 4
      src/main/webapp/WEB-INF/views/marketing/CouponRetrievePopupForm.html
  45. 3 2
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  46. 31 14
      src/main/webapp/WEB-INF/views/order/CancelRequestForm.html
  47. 82 13
      src/main/webapp/WEB-INF/views/order/OrderDetailForm.html
  48. 103 24
      src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html
  49. 34 32
      src/main/webapp/ux/css/admin.ui.css
  50. 1 1
      src/main/webapp/ux/js/admin.popup.js
  51. 6 4
      src/main/webapp/ux/plugins/agGrid/ag-theme-balham.css
  52. 15 0
      src/main/webapp/ux/plugins/gaga/gaga.agGrid.js
  53. 68 3
      src/main/webapp/ux/plugins/gaga/gaga.paging.js

+ 17 - 4
src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java

@@ -1,19 +1,22 @@
 package com.style24.admin.biz.dao;
 
-import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.*;
-import org.springframework.stereotype.Component;
-
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.springframework.stereotype.Component;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Coupon;
+
 /**
  * 쿠폰 DAO
  * @author xyzp1539
  * @since  2021-01-11
  */
 @ShopDs
+@Component
 public interface TsaCouponDao {
+
 	/**
 	 * 쿠폰 리스트 조회
 	 * @param  Coupon
@@ -39,4 +42,14 @@ public interface TsaCouponDao {
 	 * @since  2021-01-12
 	 */
 	void couponInsert(Coupon params);
+
+	/**
+	 * 쿠폰조회 목록
+	 * @param coupon - 쿠폰 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 8
+	 */
+	Collection<Coupon> getCouponRetrieveList(Coupon coupon);
+
 }

+ 28 - 0
src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java

@@ -0,0 +1,28 @@
+package com.style24.admin.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.CustomerSearch;
+import org.springframework.stereotype.Repository;
+
+import java.util.Collection;
+
+/**
+ * 회원 Dao
+ * 
+ * @author jsshin
+ * @since 2020. 11. 3
+ */
+@ShopDs
+@Repository
+public interface TsaCustomerDao {
+
+	/**
+	 * 활동회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 01. 12
+	 */
+	Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch);
+}

+ 3 - 4
src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java

@@ -1,12 +1,11 @@
 package com.style24.admin.biz.dao;
 
+import java.util.Collection;
+
 import org.springframework.stereotype.Component;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
+import com.style24.persistence.domain.FreeGoodsPromotion;
 
 /**
  * 마케팅 Dao

+ 27 - 49
src/main/java/com/style24/admin/biz/service/TsaCouponService.java

@@ -6,6 +6,9 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -47,70 +50,34 @@ public class TsaCouponService {
 	public void couponSave(Coupon params) {
 		String cpnId = "";		// 쿠폰ID
 
-		params = applyTargetSetting(params);
-
 		params.setRegNo(TsaSession.getInfo().getUserNo());
 		params.setUpdNo(TsaSession.getInfo().getUserNo());
 
 		// 자동생성이면 시퀀스 가져오기
-		if(params.getCpnId() == null || params.getCpnId().equals("")) {
-			int sequence = commonService.getNextSequence("SEQ_COUPON");
+		/*if(StringUtils.isBlank(params.getCpnId())) {
+			Integer sequence = commonService.getNextSequence("SEQ_COUPON");
 			cpnId = "CPN"+sequence;
 		} else {
 			cpnId = params.getCpnId();
 		}
-
-		log.info(">>>> CPNID : {}" , cpnId );
 		params.setCpnId(cpnId);
 
 		couponDao.couponInsert(params);
+		*/
+		Gson gson = new Gson();
 
-
-		//checkCpnValidation(params);
-
-	}
-
-	// 쿠폰 적용대상 세팅
-	public Coupon applyTargetSetting(Coupon params) {
-		Collection<Coupon> cpnSupplyCompList = null;
-		Collection<Coupon> cpnBrandList = null;
-		Collection<Coupon> cpnApplyGoodsList = null;
-		Collection<Coupon> cpnCateList = null;
-		Collection<Coupon> cpnBurdenList = null;
-		Collection<Coupon> cpnExcepGoodsList = null;
-		ObjectMapper mapper = new ObjectMapper();
-
-		try {
-			if(params.getSupplyCompList() != null) {
-				cpnSupplyCompList = mapper.readValue(params.getSupplyCompList(), new TypeReference<Collection<Coupon>>() {
-				});
-			}
-			if(params.getBrandList() != null) {
-				cpnBrandList = mapper.readValue(params.getBrandList(), new TypeReference<Collection<Coupon>>() {
-				});
-			}
-			if(params.getApplyGoodsList() != null) {
-				cpnApplyGoodsList = mapper.readValue(params.getApplyGoodsList(), new TypeReference<Collection<Coupon>>() {
-				});
-			}
-			if(params.getCateList() != null) {
-				cpnCateList = mapper.readValue(params.getCateList(), new TypeReference<Collection<Coupon>>() {
-				});
-			}
-			if(params.getBurdenList() != null) {
-				cpnBurdenList = mapper.readValue(params.getBurdenList(), new TypeReference<Collection<Coupon>>() {
-				});
-			}
-			if(params.getCateList() != null) {
-				cpnExcepGoodsList = mapper.readValue(params.getExceptGoodsList(), new TypeReference<Collection<Coupon>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
+		Collection<Coupon>	supplyCompList = gson.fromJson(params.getSupplyCompList() , new TypeToken<Collection<Coupon>>(){}.getType());
+		for(Coupon supplyComp : supplyCompList) {
+		//	couponDao.couponRefValInsert(supplyComp);
 		}
+		Collection<Coupon> brandList = gson.fromJson(params.getBrandList() , new TypeToken<Collection<Coupon>>(){}.getType());
+		Collection<Coupon> applyGoodsList = gson.fromJson(params.getApplyGoodsList() , new TypeToken<Collection<Coupon>>(){}.getType());
+		Collection<Coupon> cateList = gson.fromJson(params.getCateList() , new TypeToken<Collection<Coupon>>(){}.getType());
+		Collection<Coupon> exceptGoodsList = gson.fromJson(params.getExceptGoodsList() , new TypeToken<Collection<Coupon>>(){}.getType());
+		Collection<Coupon> burdenList = gson.fromJson(params.getBurdenList() , new TypeToken<Collection<Coupon>>(){}.getType());
 
+		//checkCpnValidation(params);
 
-		return params;
 	}
 
 	/**
@@ -206,4 +173,15 @@ public class TsaCouponService {
 
 	}
 
+	/**
+	 * 쿠폰조회 목록
+	 * @param coupon - 쿠폰 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 8
+	 */
+	public Collection<Coupon> getCouponRetrieveList(Coupon coupon) {
+		return couponDao.getCouponRetrieveList(coupon);
+	}
+
 }

+ 29 - 0
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -0,0 +1,29 @@
+package com.style24.admin.biz.service;
+
+import com.style24.admin.biz.dao.TsaCustomerDao;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.CustomerSearch;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 회원 Service
+ *
+ * @author jsshin
+ * @since 2020. 01. 12
+ */
+@Service
+@Slf4j
+public class TsaCustomerService {
+
+	@Autowired
+	private TsaCustomerDao customerDao;
+
+
+	public Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch) {
+		return customerDao.getCustomerActiveList(customerSearch);
+	}
+}

+ 8 - 22
src/main/java/com/style24/admin/biz/service/TsaMarketingService.java

@@ -1,33 +1,19 @@
 package com.style24.admin.biz.service;
 
-import com.fasterxml.jackson.core.type.TypeReference;
+import java.util.Collection;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.excel.GagaExcelUtil;
-import com.gagaframework.excel.env.GagaExcelConstants;
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.util.GagaDateUtil;
-import com.gagaframework.web.util.GagaFileUtil;
-import com.gagaframework.web.util.GagaStringUtil;
-import com.style24.admin.biz.dao.TsaGoodsDao;
 import com.style24.admin.biz.dao.TsaMarketingDao;
-import com.style24.admin.support.env.TsaConstants;
-import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.thirdparty.NaverLowestPriceApi;
 import com.style24.core.biz.thirdparty.SafetyKoreaApi;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.*;
-import io.netty.util.internal.StringUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.StringUtils;
+import com.style24.persistence.domain.FreeGoodsPromotion;
 
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  *상품관리 Service

+ 57 - 43
src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -1,5 +1,7 @@
 package com.style24.admin.biz.service;
 
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.MoreBetter;
@@ -7,6 +9,7 @@ import com.style24.persistence.domain.MoreBetterBurden;
 import com.style24.persistence.domain.MoreBetterGoods;
 import com.style24.persistence.domain.MoreBetterSection;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -118,132 +121,143 @@ public class TsaMorebetterService {
 
     /**
      * 다다익선 저장
-     * @param tmtb
+     * @param moreBetter
      * @return
      * @author bin2107
      * @since 2021. 1. 5
      */
     @Transactional("shopTxnManager")
-    public void saveMoreBetterDetail(MoreBetter tmtb) {
+    public void saveMoreBetterDetail(MoreBetter moreBetter) {
+        Gson gson = new Gson();
+        String jsonData = gson.toJson(moreBetter);
+
         // <,> replace 처리
-        tmtb.setRegNo(TsaSession.getInfo().getUserNo());
-        tmtb.setUdpNo(TsaSession.getInfo().getUserNo());
+        moreBetter.setRegNo(TsaSession.getInfo().getUserNo());
+        moreBetter.setUdpNo(TsaSession.getInfo().getUserNo());
 
         // TMTB 마스터(TB_TMTB) 저장
-        morebetterDao.saveMorebetterMst(tmtb);
+        morebetterDao.saveMorebetterMst(moreBetter);
 
         // 다다익선 적용대상 설정
         // 공급업체
-        Collection<MoreBetterGoods> supplyCompList = tmtb.getSupplyCompListNew();
+        Collection<MoreBetterGoods> supplyCompList = gson.fromJson(moreBetter.getSupplyCompList() , new TypeToken<Collection<MoreBetterGoods>>(){}.getType());
         for(MoreBetterGoods regSupplyComp : supplyCompList){
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
             // tmtbGoodsSq 생성
             log.info("regSupplyComp.getTmtbGoodsSq = {}",regSupplyComp.getTmtbGoodsSq());
-            if("".equals(regSupplyComp.getTmtbGoodsSq())){
-                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+            Integer tmtbGoodsSq = regSupplyComp.getTmtbGoodsSq();
+            if(tmtbGoodsSq == null){
+                tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
                 regSupplyComp.setTmtbGoodsSq(tmtbGoodsSq);
             }
-            regSupplyComp.setTmtbSq(tmtb.getTmtbSq());
+            regSupplyComp.setTmtbSq(moreBetter.getTmtbSq());
             regSupplyComp.setGoodsGb("G800_20");
             regSupplyComp.setTargetVal(regSupplyComp.getSupplyCompCd());
-            regSupplyComp.setRegNo(tmtb.getRegNo());
-            regSupplyComp.setUdpNo(tmtb.getUdpNo());
+            regSupplyComp.setRegNo(moreBetter.getRegNo());
+            regSupplyComp.setUdpNo(moreBetter.getUdpNo());
 
             morebetterDao.saveMorebetterGoods(regSupplyComp);
         }
 
         // 브랜드
-        Collection<MoreBetterGoods> brandList = tmtb.getBrandListNew();
+        Collection<MoreBetterGoods> brandList = gson.fromJson(moreBetter.getBrandList() , new TypeToken<Collection<MoreBetterGoods>>(){}.getType());
         for(MoreBetterGoods regBrand : brandList){
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
             // tmtbGoodsSq 생성
             log.info("regBrand.getTmtbGoodsSq = {}",regBrand.getTmtbGoodsSq());
-            if("".equals(regBrand.getTmtbGoodsSq())){
-                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+            Integer tmtbGoodsSq = regBrand.getTmtbGoodsSq();
+            if(tmtbGoodsSq == null){
+                tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
                 regBrand.setTmtbGoodsSq(tmtbGoodsSq);
             }
-            regBrand.setTmtbSq(tmtb.getTmtbSq());
+            regBrand.setTmtbSq(moreBetter.getTmtbSq());
             regBrand.setGoodsGb("G800_20");
             regBrand.setTargetVal(regBrand.getBrandCd());
-            regBrand.setRegNo(tmtb.getRegNo());
-            regBrand.setUdpNo(tmtb.getUdpNo());
+            regBrand.setRegNo(moreBetter.getRegNo());
+            regBrand.setUdpNo(moreBetter.getUdpNo());
 
             morebetterDao.saveMorebetterGoods(regBrand);
         }
 
         // 적용상품
-        Collection<MoreBetterGoods> applyGoodsList = tmtb.getApplyGoodsListNew();
+        Collection<MoreBetterGoods> applyGoodsList = gson.fromJson(moreBetter.getApplyGoodsList() , new TypeToken<Collection<MoreBetterGoods>>(){}.getType());
         for(MoreBetterGoods regApplyGoods : applyGoodsList){
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
             // tmtbGoodsSq 생성
             log.info("regApplyGoods.getTmtbGoodsSq = {}",regApplyGoods.getTmtbGoodsSq());
-            if("".equals(regApplyGoods.getTmtbGoodsSq())){
-                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+            Integer tmtbGoodsSq = regApplyGoods.getTmtbGoodsSq();
+            if(tmtbGoodsSq == null){
+                tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
                 regApplyGoods.setTmtbGoodsSq(tmtbGoodsSq);
             }
-            regApplyGoods.setTmtbSq(tmtb.getTmtbSq());
+            regApplyGoods.setTmtbSq(moreBetter.getTmtbSq());
             regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
-            regApplyGoods.setRegNo(tmtb.getRegNo());
-            regApplyGoods.setUdpNo(tmtb.getUdpNo());
+            regApplyGoods.setRegNo(moreBetter.getRegNo());
+            regApplyGoods.setUdpNo(moreBetter.getUdpNo());
 
             morebetterDao.saveMorebetterGoods(regApplyGoods);
         }
 
         // 제외상품
-        Collection<MoreBetterGoods> exceptGoodsList = tmtb.getExceptGoodsListNew();
+        Collection<MoreBetterGoods> exceptGoodsList = gson.fromJson(moreBetter.getExceptGoodsList() , new TypeToken<Collection<MoreBetterGoods>>(){}.getType());
         for(MoreBetterGoods regExceptGoods : exceptGoodsList){
             // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
             // tmtbGoodsSq 생성
             log.info("regExceptGoods.getTmtbGoodsSq = {}",regExceptGoods.getTmtbGoodsSq());
-            if("".equals(regExceptGoods.getTmtbGoodsSq())){
-                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+            Integer tmtbGoodsSq = regExceptGoods.getTmtbGoodsSq();
+            if(tmtbGoodsSq == null){
+                tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
                 regExceptGoods.setTmtbGoodsSq(tmtbGoodsSq);
             }
-            regExceptGoods.setTmtbSq(tmtb.getTmtbSq());
+            regExceptGoods.setTmtbSq(moreBetter.getTmtbSq());
             regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
-            regExceptGoods.setRegNo(tmtb.getRegNo());
-            regExceptGoods.setUdpNo(tmtb.getUdpNo());
+            regExceptGoods.setRegNo(moreBetter.getRegNo());
+            regExceptGoods.setUdpNo(moreBetter.getUdpNo());
 
             morebetterDao.saveMorebetterGoods(regExceptGoods);
         }
 
         // 다다익선 할인구간 저장
-        Collection<MoreBetterSection> sectionGbList = tmtb.getSectionGbListNew();
+        Collection<MoreBetterSection> sectionGbList = gson.fromJson(moreBetter.getSectionGbList() , new TypeToken<Collection<MoreBetterSection>>(){}.getType());
         for(MoreBetterSection regSection : sectionGbList){
             log.info("regSection.getTmtbSectionSq = {}",regSection.getTmtbSectionSq());
             log.info("regSection.getTmtbValSq = {}",regSection.getTmtbValSq());
             // 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
             // tmtbSectionSq 생성
-            if("".equals(regSection.getTmtbSectionSq()) || regSection.getTmtbSectionSq() == null){
-                Integer tmtbSectionSq =  commonService.getNextSequence("SEQ_TMTB_SECTION");
+            Integer tmtbSectionSq = regSection.getTmtbSectionSq();
+            //if("".equals(regSection.getTmtbSectionSq()) || regSection.getTmtbSectionSq() == null){
+            if(tmtbSectionSq == null){
+                tmtbSectionSq =  commonService.getNextSequence("SEQ_TMTB_SECTION");
                 regSection.setTmtbSectionSq(tmtbSectionSq);
             }
             // 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
             // tmtbValSq 생성
-            if("".equals(regSection.getTmtbValSq()) || regSection.getTmtbValSq() == null){
-                Integer tmtbValSq =  commonService.getNextSequence("SEQ_TMTB_VAL");
+            Integer tmtbValSq = regSection.getTmtbValSq();
+            if(tmtbValSq == null){
+                tmtbValSq =  commonService.getNextSequence("SEQ_TMTB_VAL");
                 regSection.setTmtbValSq(tmtbValSq);
             }
-            regSection.setTmtbSq(tmtb.getTmtbSq());
-            regSection.setRegNo(tmtb.getRegNo());
-            regSection.setUdpNo(tmtb.getUdpNo());
+            regSection.setTmtbSq(moreBetter.getTmtbSq());
+            regSection.setRegNo(moreBetter.getRegNo());
+            regSection.setUdpNo(moreBetter.getUdpNo());
 
             morebetterDao.saveMorebetterSection(regSection);
             morebetterDao.saveMorebetterVal(regSection);
         }
 
         // 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
-        Collection<MoreBetterBurden> burdenList = tmtb.getBurdenListNew();
+        Collection<MoreBetterBurden> burdenList = gson.fromJson(moreBetter.getBurdenList() , new TypeToken<Collection<MoreBetterBurden>>(){}.getType());
         for (MoreBetterBurden regBurden : burdenList) {
             // tmtbBurdenSq 생성
             log.info("regBurden.getTmtbBurdenSq = {}",regBurden.getTmtbBurdenSq());
-            if("".equals(regBurden.getTmtbBurdenSq())){
-                Integer tmtbBurdenSq =  commonService.getNextSequence("SEQ_TMTB_BURDEN");
+            Integer tmtbBurdenSq = regBurden.getTmtbBurdenSq();
+            if(tmtbBurdenSq == null){
+                tmtbBurdenSq =  commonService.getNextSequence("SEQ_TMTB_BURDEN");
                 regBurden.setTmtbBurdenSq(tmtbBurdenSq);
             }
-            regBurden.setTmtbSq(tmtb.getTmtbSq());
-            regBurden.setRegNo(tmtb.getRegNo());
-            regBurden.setUdpNo(tmtb.getUdpNo());
+            regBurden.setTmtbSq(moreBetter.getTmtbSq());
+            regBurden.setRegNo(moreBetter.getRegNo());
+            regBurden.setUdpNo(moreBetter.getUdpNo());
 
             morebetterDao.saveMorebetterBurden(regBurden);
         }

+ 246 - 1
src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java

@@ -352,7 +352,7 @@ public class TsaOrderChangeService {
 		String chgMemo 		= mav.getString("chgMemo").toString();
 		String allCanYn		= mav.getString("allCanYn").toString();
 		String isCustomer	= mav.getString("isCustomer").toString();
-		String chgGb		= "G680_20";
+		String chgGb		= "G680_20"; // 취소요청
 		
 		// 4.1 주문변경 기본정보 등록
 		OrderChange orderChange = new OrderChange();
@@ -365,6 +365,19 @@ public class TsaOrderChangeService {
 		orderChange.setRegNo(userNo);
 		orderChange.setUpdNo(userNo);
 		
+		// 4.2 주문변경 추가정조 등록하기
+		// 4.2 반품회수지 정보 등록
+		String chgerNm 			= mav.getString("chgerNm").toString();
+		String chgerPhnno 		= mav.getString("chgerPhnno").toString();
+		String chgerTelno 		= mav.getString("chgerTelno").toString();
+		String chgerEmail 		= mav.getString("chgerEmail").toString();
+		
+		orderChange.setChgerNm(chgerNm);
+		orderChange.setChgerPhnno(chgerPhnno);
+		orderChange.setChgerTelno(chgerTelno);
+		orderChange.setChgerEmail(chgerEmail);
+		orderChange.setChgerRtnMemo("");
+		
 		orderChangeDao.createOrderChange(orderChange);
 		
 		List<Order> cancelOrderDetailList = new ArrayList<Order>();
@@ -542,6 +555,238 @@ public class TsaOrderChangeService {
 		//int a = 100/0;
 	}
 	
+	/**
+	 * 주문상세 > 주문취소신청 > 주문반품신청
+	 * @param Order
+	 * @return Order
+	 * @author jsh77b
+	 * @since 2021. 01. 14
+	 */
+	@Transactional("shopTxnManager")
+	public void orderReturn(GagaMap mav) {
+		
+		// 1. 세션회원조회
+		int userNo = TsaSession.getInfo().getUserNo();
+		
+		// 2. 취소요정정보목록
+		List<Order> cancelReqList		 	= (List<Order>) mav.get("cancelReqList");			//주문 취소 신청 목록
+		List<Order> cancelOrderRefundList 	= (List<Order>) mav.get("cancelOrderRefundList");	//주문 환불 금액 목록
+		List<Order> cancelDelvRefundList 	= (List<Order>) mav.get("cancelDelvRefundList");	//주문 환불 배송 금액 목록
+				
+		// 3. 취소신청정보
+		int ordNo 			= Integer.parseInt(mav.getString("ordNo").toString());
+		String chgReason 	= mav.getString("chgReason").toString();
+		String chgMemo 		= mav.getString("chgMemo").toString();
+		String allCanYn		= mav.getString("allCanYn").toString();
+		String isCustomer	= mav.getString("isCustomer").toString();
+		String chgGb		= "G680_30"; //반품요청
+		
+		// 4.1 주문변경 기본정보 등록
+		OrderChange orderChange = new OrderChange();
+		orderChange.setOrdNo(ordNo);
+		orderChange.setChgGb(chgGb);
+		orderChange.setChgReason(chgReason);
+		orderChange.setChgMemo(chgMemo);
+		orderChange.setAddPayCost(0);
+		orderChange.setAddPayAmt(0);
+		orderChange.setRegNo(userNo);
+		orderChange.setUpdNo(userNo);
+		
+		// 4.2 반품추가정보, 반품회수지 정보 등록
+		String chgerNm 			= mav.getString("chgerNm").toString();
+		String chgerPhnno 		= mav.getString("chgerPhnno").toString();
+		String chgerTelno 		= mav.getString("chgerTelno").toString();
+		String chgerEmail 		= mav.getString("chgerEmail").toString();
+		String chgerZipNo 		= mav.getString("chgerZipNo").toString();
+		String chgerBaseAddr 	= mav.getString("chgerBaseAddr").toString();
+		String chgerDtlAddr 	= mav.getString("chgerDtlAddr").toString();
+		
+		orderChange.setChgerNm(chgerNm);
+		orderChange.setChgerPhnno(chgerPhnno);
+		orderChange.setChgerTelno(chgerTelno);
+		orderChange.setChgerEmail(chgerEmail);
+		orderChange.setChgerZipNo(chgerZipNo);
+		orderChange.setChgerBaseAddr(chgerBaseAddr);
+		orderChange.setChgerDtlAddr(chgerDtlAddr);
+		orderChange.setChgerRtnMemo("");
+		
+		orderChangeDao.createOrderChange(orderChange);
+		
+		List<Order> cancelOrderDetailList = new ArrayList<Order>();
+		
+		// 4.2 주문변경 상세 단품 정보 등록 (단품단위)
+		for (int i=0 ; i<cancelOrderRefundList.size() ; i++) {
+			Order cancelOrderRefundPo = cancelOrderRefundList.get(i);
+			cancelOrderRefundPo.setRegNo(userNo);
+			cancelOrderRefundPo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				cancelOrderRefundPo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				cancelOrderRefundPo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+
+			// 4.2.1 취소수량이 존재하면 주문정보 수정 및 주문변경정보 등록
+			if (cancelOrderRefundPo.getOrdCanChgQty() > 0) {
+				// 4.2.3 주문상세단품정보 수정
+				//orderChangeDao.updateOrderDetailItem(cancelOrderRefundPo);
+				
+				// 4.2.4 주문상세단품정보 이력 등록
+				//orderChangeDao.createOrderDetailItemHst(cancelOrderRefundPo);
+				
+				// 4.3 주문변경 상세 단위로 데이타 등록 (ORD_DTL_NO)
+				Boolean temp = false;
+				
+				if (cancelOrderDetailList.size() > 0) {
+					for (int j=0 ; j<cancelOrderDetailList.size() ; j++) {
+						if (cancelOrderRefundPo.getOrdDtlNo() == cancelOrderDetailList.get(j).getOrdDtlNo()) {
+							temp = true;
+						}
+					}
+				}
+				
+				// 4.4 주문상세단위 데이타 저장
+				if (!temp) {
+					cancelOrderDetailList.add(cancelOrderRefundPo);
+				}
+				
+				// 4.5 상품옵션 재고 원복
+				//orderChangeDao.updateOptionQty(cancelOrderRefundPo);
+			}
+		}
+		
+		// 5. 주문상세단위 취소 데이타 처리
+		for (int i=0 ; i<cancelOrderDetailList.size() ; i++) {			
+			Order vo = cancelOrderRefundList.get(i);
+			vo.setRegNo(userNo);
+			vo.setUpdNo(userNo);
+			
+			// 2020.01.05 추후 무통장입금전 전체 취소시 분기로직 추가 예정
+			if ("Y".equals(allCanYn)) {
+				vo.setOrdDtlStat("G013_98"); // 결제전주문취소 : 공통코드로관리예정
+			} else {
+				vo.setOrdDtlStat("G013_99"); // 결제후주문취소 : 공통코드로관리예정
+			}
+			
+			// 5.1 주문변경상세정보 이력 등록
+			orderChangeDao.createOrderDetailHstCnclRtn(vo);
+			
+			// 4.2 주문변경상세정보 수정
+			//orderChangeDao.updateOrderDetail(vo);
+			
+			// * 주문상세단위가 아닌 주문상세단품단위로 데이타가 처리되고 있었음
+			// 5.3 주문변경상세정보 등록
+			OrderChange changeDetailPo = new OrderChange();
+			changeDetailPo.setOrdChgSq(orderChange.getOrdChgSq());
+			changeDetailPo.setOrdDtlNo(vo.getOrdDtlNo());
+			changeDetailPo.setChgQty(vo.getOrdCanChgQty());
+			changeDetailPo.setChgStat("G685_40"); // 반품요청 : 공통코드로관리예정
+			changeDetailPo.setRegNo(userNo);
+			changeDetailPo.setUpdNo(userNo);
+			
+			orderChangeDao.createOrderChangeDetail(changeDetailPo);
+		}
+		
+		// To Do List
+		// 취소, 반품 사유에 따른 추가배송비, 반품배송비를 환불금액에서 추가, 제외 할 수 있다.
+		int spanRealCnclRtnAmt 		= Integer.parseInt(mav.get("spanRealCnclRtnAmt").toString());		// 취소금액합계
+		int sumDeliveryFee 			= Integer.parseInt(mav.get("sumDeliveryFee").toString());			// 배송비합계
+		int spanTotDeliveryFee 		= Integer.parseInt(mav.get("spanTotDeliveryFee").toString());		// 추가배송비합계
+		int spanTotRtnDelvFee 		= Integer.parseInt(mav.get("spanTotRtnDelvFee").toString());		// 반품배송비합계
+		int spanRefundAmt			= 0;
+		
+		// 고객사유 : 환불금액계산 = (취소금액 + 배송비) - 추가배송비
+		if ("true".equals(isCustomer)) {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee) - spanTotDeliveryFee - spanTotRtnDelvFee;
+			//Integer.parseInt(mav.get("spanRefundAmt").toString());
+		}
+		// 회사사유 : 환불금액계산 = (취소금액 + 배송비)
+		else {
+			spanRefundAmt = (spanRealCnclRtnAmt + sumDeliveryFee);
+		}
+		mav.set("spanRefundAmt", spanRefundAmt);
+		
+		// 6. 환불결제 정보 등록
+		Order paymentOrder = new Order();
+		paymentOrder.setOrdNo(ordNo);
+		paymentOrder.setPayAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()) * -1);
+		paymentOrder.setPayStat("G016_99");
+		paymentOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		paymentOrder.setRegNo(userNo);
+		paymentOrder.setUpdNo(userNo);
+		
+		//orderChangeDao.createPayment(paymentOrder);
+		
+		// 7. 환불금액 등록
+		Order refundOrder = new Order();
+		refundOrder.setOrdNo(ordNo);
+		refundOrder.setPaySq(paymentOrder.getPaySq());
+		refundOrder.setOrdChgSq(orderChange.getOrdChgSq());
+		refundOrder.setRegNo(userNo);
+		
+		refundOrder.setRefundAmt(Integer.parseInt(mav.get("spanRefundAmt").toString()));
+		refundOrder.setRfCpn1Amt(Integer.parseInt(mav.get("spanCpn1DcAmt").toString()));
+		refundOrder.setRfTmtb1Amt(Integer.parseInt(mav.get("spanTmtb1DcAmt").toString()));
+		refundOrder.setRfTmtb2Amt(Integer.parseInt(mav.get("spanTmtb2DcAmt").toString()));
+		refundOrder.setRfGoodsCpnAmt(Integer.parseInt(mav.get("spanGoodsCpnDcAmt").toString()));
+		refundOrder.setRfCartCpnAmt(Integer.parseInt(mav.get("spanCartCpnDcAmt").toString()));
+		refundOrder.setRfPntAmt(Integer.parseInt(mav.get("spanPntDcAmt").toString()));
+		refundOrder.setRfPrePntAmt(Integer.parseInt(mav.get("spanPrePntDcAmt").toString()));
+		refundOrder.setRfGfcdUseAmt(Integer.parseInt(mav.get("spanGfcdUseAmt").toString()));
+		
+		refundOrder.setRaNo(mav.get("accountNo").toString());
+		refundOrder.setRaNm(mav.get("accountNm").toString());
+		refundOrder.setRaBank(mav.get("bankCd").toString());
+		
+		//orderChangeDao.createRefund(refundOrder);
+		
+		// 8. 결제금액이 무료배송금액보다 작으면 배송비 신규 등록
+		for (int i=0 ; i<cancelDelvRefundList.size() ; i++) {
+			Order vo = cancelDelvRefundList.get(i);
+			
+			if (vo.getAddDelvFee() > 0) {
+				Order delvFeeOrder = new Order();
+				
+				delvFeeOrder.setPaySq(paymentOrder.getPaySq());
+				delvFeeOrder.setOrdNo(ordNo);
+				delvFeeOrder.setDelvFeeGb("G018_10");
+				delvFeeOrder.setDelvFeeCd(vo.getDelvFeeCd());
+				delvFeeOrder.setDelvFee(vo.getAddDelvFee());
+				delvFeeOrder.setRealDelvAmt(vo.getDelvFee());
+				delvFeeOrder.setOrdChgSq(orderChange.getOrdChgSq());
+				delvFeeOrder.setSupplyCompCd(vo.getSupplyCompCd());
+				delvFeeOrder.setRegNo(userNo);
+				delvFeeOrder.setUpdNo(userNo);
+				
+				//orderChangeDao.createDeliveryFee(delvFeeOrder);
+			}
+		}
+		
+		// To Do List
+		// 9. 포인트원복 (사용포인트, 주문상세단위)
+		
+		// To Do List
+		// 10. 쿠폰원복 (상품쿠폰, 주문상세단위) (전체취소시 장바구니쿠폰, 배송비쿠폰)
+		
+		// To Do List
+		// 11. 상품권원복
+		
+		// 12. 사은품 전체 취소 (전체취소시 적용) 추후 사은품 관련 취소 로직 개발 예정
+		Order freegiftOrder = new Order();
+		freegiftOrder.setOrdNo(ordNo);
+		freegiftOrder.setUpdNo(userNo);
+		//orderChangeDao.updateOrdFreegiftDel(freegiftOrder);
+		
+		// To Do List
+		// 13. PG 연동
+		
+		// To Do List
+		// 14. 취소 완료 알림톡 발송 에정
+		
+		//int a = 100/0;
+	}
+	
 	
 	
 	

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

@@ -602,7 +602,7 @@ public class TsaBusinessController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		mav.addObject("params", brand);
-		mav.setViewName("business/BrandSearchForm");
+		mav.setViewName("business/BrandSearchPopupForm");
 		return mav;
 	}
 

+ 47 - 0
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -2,6 +2,9 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import com.style24.admin.biz.service.TsaCustomerService;
+import com.style24.persistence.domain.Customer;
+import com.style24.persistence.domain.CustomerSearch;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -48,6 +51,9 @@ public class TsaCustomerController extends TsaBaseController {
 	@Autowired
 	private TscAnswerPhaseService ansPhaseService;
 
+	@Autowired
+	private TsaCustomerService customerService;
+
 	/**
 	 * 1:1문의관리 화면
 	 * @return
@@ -235,4 +241,45 @@ public class TsaCustomerController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0004"));
 	}
 
+	/**
+	 * 활동회원
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2020. 01. 12
+	 */
+	@GetMapping("/active/list/form")
+	public ModelAndView customerActiveListForm() {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000", "Y"));
+
+		// 회원 구분
+		mav.addObject("custGbList", rendererService.getCommonCodeList("G100", "Y"));
+
+		// 회원 등급
+		mav.addObject("custGradeList", rendererService.getCommonCodeList("G110", "Y"));
+
+		// 관리대상
+		mav.addObject("managedRsnList", rendererService.getCommonCodeList("G103", "Y"));
+
+		mav.setViewName("customer/CustomerActiveListForm");
+
+		return mav;
+	}
+
+	/**
+	 * 활동회원 목록
+	 * @param customerSearch - 검색조건
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2020. 12. 24
+	 */
+	@PostMapping("/active/list")
+	@ResponseBody
+	public Collection<Customer> getCustomerActiveList(@RequestBody CustomerSearch customerSearch) {
+		return customerService.getCustomerActiveList(customerSearch);
+	}
+
+
 }

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

@@ -2,6 +2,7 @@ package com.style24.admin.biz.web;
 
 import java.util.Collection;
 
+import com.gagaframework.web.util.GagaDateUtil;
 import com.style24.persistence.domain.Brand;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -219,7 +220,21 @@ public class TsaDisplayController extends TsaBaseController {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태
-		mav.addObject("goodsStatList", rendererService.getAvailCommonCodeList("G032"));
+		String[] exceptCds = {"G008_00"};
+		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
+		// 공급업체
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
+		// MD
+		mav.addObject("mdIdList", rendererService.getBrandMdList());
+		// 정상이월
+		mav.addObject("formalGbList", rendererService.getAvailCommonCodeList("G009"));
+		// 품목
+		mav.addObject("itemkindList", rendererService.getAllItemkindList());
+		// 년도
+		int toYear = Integer.parseInt(GagaDateUtil.getToday("yyyy")) - 4;
+		mav.addObject("styleYearList", rendererService.getYearList(toYear, 0, 5));
+		// 시즌
+		mav.addObject("seasonList", rendererService.getAvailCommonCodeList("G006"));
 
 		mav.setViewName("display/GoodsCategoryForm");
 

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

@@ -7,6 +7,7 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.style24.persistence.TscPageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -31,7 +32,6 @@ import com.style24.admin.biz.service.TsaSystemService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.domain.AdKeyword;
 import com.style24.persistence.domain.AdKeywordGoods;
 import com.style24.persistence.domain.Color;
@@ -509,7 +509,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 		log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1275,7 +1275,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		GagaMap result = new GagaMap();
 
-		wmsGoods.setPageable(new TsaPageRequest(wmsGoods.getPageNo() - 1, wmsGoods.getPageSize()));
+		wmsGoods.setPageable(new TscPageRequest(wmsGoods.getPageNo() - 1, wmsGoods.getPageSize()));
 		wmsGoods.getPageable().setTotalCount(goodsService.getGoodsWmsIncomelotListCount(wmsGoods));
 
 		result.set("pageing", wmsGoods);
@@ -1482,7 +1482,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsTitleReserveCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1683,7 +1683,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsEpSkipCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1776,7 +1776,7 @@ public class TsaGoodsController extends TsaBaseController {
 
 		GagaMap result = new GagaMap();
 
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getReinboundInformCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -1857,7 +1857,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsResSellCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -2084,7 +2084,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 		log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);
@@ -2150,7 +2150,7 @@ public class TsaGoodsController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsPriceResCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);

+ 134 - 144
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1,26 +1,45 @@
 package com.style24.admin.biz.web;
 
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponse;
-import com.style24.admin.biz.service.*;
-import com.style24.admin.support.controller.TsaBaseController;
-import com.style24.admin.support.security.session.TsaSession;
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.TsaPageRequest;
-import com.style24.persistence.domain.*;
-import lombok.extern.slf4j.Slf4j;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import com.style24.persistence.TscPageRequest;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
 
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import com.style24.admin.biz.service.TsaBusinessService;
+import com.style24.admin.biz.service.TsaCommonService;
+import com.style24.admin.biz.service.TsaCouponService;
+import com.style24.admin.biz.service.TsaMarketingService;
+import com.style24.admin.biz.service.TsaMorebetterService;
+import com.style24.admin.biz.service.TsaRendererService;
+import com.style24.admin.biz.service.TsaSystemService;
+import com.style24.admin.support.controller.TsaBaseController;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.CommonCode;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.FreeGoodsPromotion;
+import com.style24.persistence.domain.MoreBetter;
+import com.style24.persistence.domain.MoreBetterBurden;
+import com.style24.persistence.domain.MoreBetterGoods;
+import com.style24.persistence.domain.MoreBetterSection;
+
+import lombok.extern.slf4j.Slf4j;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+
 /**
  * 마케팅 Controller
  * @author xodud1202
@@ -81,10 +100,10 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getFreeGoodsPromotionList(@RequestBody FreeGoodsPromotion param) {
 		GagaMap result = new GagaMap();
 
-		List<FreeGoodsPromotion> marketingList = (ArrayList<FreeGoodsPromotion>) marketingService.getFreeGoodsPromotionList(param);
+		List<FreeGoodsPromotion> marketingList = (ArrayList<FreeGoodsPromotion>)marketingService.getFreeGoodsPromotionList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(marketingList.size());
 
 		result.set("pageing", param);
@@ -93,7 +112,6 @@ public class TsaMarketingController extends TsaBaseController {
 		return result;
 	}
 
-
 	/**
 	 * 사은품 프로모션 등록 팝업창
 	 * @param param
@@ -115,11 +133,11 @@ public class TsaMarketingController extends TsaBaseController {
 	}
 
 	/**
-	 * 사은품 프로모션 등록 팝업창
+	 * 사은품 프로모션 등록
 	 * @param param
 	 * @return ModelAndView
 	 * @author xodud1202
-	 * @since 2020. 12. 23
+	 * @since 2021. 01. 14
 	 */
 	@ResponseBody
 	@GetMapping("/freeGoodsPromotion/save")
@@ -138,15 +156,15 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2020-12-21
 	 */
 	@GetMapping("/coupon/form")
-	public ModelAndView couponListForm(){
+	public ModelAndView couponListForm() {
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 유형 조회
-		mav.addObject("cpnTypeList" ,  rendererService.getCommonCodeList("G230"));
+		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230"));
 		// 할인 유형 조회
-		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
+		mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
 		// 사이트 조회
-		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
 		// 사용가능 고객구분 조회
 		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
 
@@ -164,19 +182,19 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@PostMapping("/coupon/list")
 	@ResponseBody
-	public GagaMap getCouponList(@RequestBody Coupon param){
-		GagaMap result =  new GagaMap();
+	public GagaMap getCouponList(@RequestBody Coupon param) {
+		GagaMap result = new GagaMap();
 
 		ArrayList<Coupon> cpnList = couponService.getCouponList(param);
 		int cpnTotCnt = couponService.getCouponListCnt(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(cpnTotCnt);
 
-		result.set("pageing" , param);
-		result.set("cpnTotCnt" , cpnTotCnt);
-		result.set("cpnList" , cpnList);
+		result.set("pageing", param);
+		result.set("cpnTotCnt", cpnTotCnt);
+		result.set("cpnList", cpnList);
 
 		return result;
 	}
@@ -195,10 +213,10 @@ public class TsaMarketingController extends TsaBaseController {
 
 		// 일시 시 리스트 세팅
 		Collection<CommonCode> hhList = new ArrayList<CommonCode>();
-		for(int i = 0; i < 24; i++) {
+		for (int i = 0; i < 24; i++) {
 			num = "";
 			CommonCode temp = new CommonCode();
-			if(i < 10) {
+			if (i < 10) {
 				num = "0" + i;
 			} else {
 				num = String.valueOf(i);
@@ -209,50 +227,50 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
 
 			temp.setCd(num);
-			temp.setCdNm(num+"시");
+			temp.setCdNm(num + "시");
 
 			hhList.add(temp);
 		}
 		// 일시 분 리스트 세팅
 		Collection<CommonCode> mmList = new ArrayList<CommonCode>();
-		for(int i = 0 ; i < 60; i++) {
+		for (int i = 0; i < 60; i++) {
 			num = "";
 			CommonCode temp = new CommonCode();
-			if(i < 10) {
+			if (i < 10) {
 				num = "0" + i;
 			} else {
 				num = String.valueOf(i);
 			}
 			temp.setCd(num);
-			temp.setCdNm(num+"분");
+			temp.setCdNm(num + "분");
 
 			mmList.add(temp);
 		}
 
 		// 쿠폰 유형 조회
-		mav.addObject("cpnTypeList" ,  rendererService.getCommonCodeList("G230"));
+		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230"));
 		// 사용가능 고객구분 조회
 		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
 		// 사용가능 고객등급 조회
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G101"));
 		// 사이트코드 조회
-		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
 		// 재발급 여부 조회
-		mav.addObject("reissuanceList" , rendererService.getCommonCodeList("G231"));
+		mav.addObject("reissuanceList", rendererService.getCommonCodeList("G231"));
 		// 할인방식 조회
-		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
+		mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
 		// 쿠폰다운로드 방식 조회
-		mav.addObject("dnGbList" , rendererService.getCommonCodeList("G058"));
+		mav.addObject("dnGbList", rendererService.getCommonCodeList("G058"));
 		// 결제수단 조회
-		mav.addObject("payTypeList" , rendererService.getCommonCodeList("G015"));
+		mav.addObject("payTypeList", rendererService.getCommonCodeList("G015"));
 		// 쿠폰상태 조회
-		mav.addObject("cpnStatList" , rendererService.getCommonCodeList("G232"));
+		mav.addObject("cpnStatList", rendererService.getCommonCodeList("G232"));
 		// 시간 분 리스트 세팅
-		mav.addObject("mmList" , mmList);
+		mav.addObject("mmList", mmList);
 		// 시간 시 리스트 세팅
-		mav.addObject("hhList" , hhList);
+		mav.addObject("hhList", hhList);
 		// 입점업체 조회
-		mav.addObject("ibSupplyCompList" , rendererService.getSupplyCompanyList("","N"));
+		mav.addObject("ibSupplyCompList", rendererService.getSupplyCompanyList("", "N"));
 
 		mav.setViewName("marketing/CouponCreatePopupForm");
 		return mav;
@@ -268,7 +286,7 @@ public class TsaMarketingController extends TsaBaseController {
 	@PostMapping("/coupon/save")
 	@ResponseBody
 	public GagaResponse couponSave(@RequestBody Coupon coupon) {
-		log.info("couponSave : {}" , coupon);
+		log.info("couponSave : {}", coupon);
 
 		couponService.couponSave(coupon);
 
@@ -300,10 +318,10 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getMorebetterList(@RequestBody MoreBetter param) {
 		GagaMap result = new GagaMap();
 
-		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>) morebetterService.getMorebetterList(param);
+		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>)morebetterService.getMorebetterList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
+		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(tmtbList.size());
 
 		result.set("pageing", param);
@@ -321,8 +339,8 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2020. 12. 29
 	 */
 	@ResponseBody
-	@GetMapping("/morebetterRegPopup/form")
-	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq,MoreBetter tmtb) {
+	@GetMapping("/morebetterPopup/form")
+	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq, MoreBetter moreBetter) {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태 : 등록일때는 '대기'
@@ -336,7 +354,7 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
 
 		// 적용 상품구분 목록
-		String[] exceptGoodsCds = {"G800_30","G800_40"};
+		String[] exceptGoodsCds = {"G800_30", "G800_40"};
 		mav.addObject("applyGoodsGbList", rendererService.getCommonCodeList("G800", "Y", exceptGoodsCds));
 
 		// 제외 상품구분 목록
@@ -347,21 +365,21 @@ public class TsaMarketingController extends TsaBaseController {
 
 		//tmtb sq 자동생성
 		Integer tmtbSq;
-		if("N".equals(mode)){
-			tmtbSq =  commonService.getNextSequence("SEQ_TMTB");
-			tmtb.setTmtbSq(tmtbSq);
+		if ("N".equals(mode)) {
+			tmtbSq = commonService.getNextSequence("SEQ_TMTB");
+			moreBetter.setTmtbSq(tmtbSq);
 		}
 
-		if("U".equals(mode)){
+		if ("U".equals(mode)) {
 			// 다다익선 정보
 			mav.addObject("tmtbMstInfo", morebetterService.getMorebetterMstInfo(tmtbSeq));
-			mav.addObject("tmtbSupplyCompList", morebetterService.getMorebetterSupplyCompList(tmtbSeq,"G260_13"));
-			mav.addObject("tmtbBrandList", morebetterService.getMorebetterBrandList(tmtbSeq,"G260_12"));
-			mav.addObject("tmtbApplyGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq,"G260_10"));
-			mav.addObject("tmtbExceptGoodsList", morebetterService.getMorebetterExceptGoodsList(tmtbSeq,"G260_10"));
+			mav.addObject("tmtbSupplyCompList", morebetterService.getMorebetterSupplyCompList(tmtbSeq, "G260_13"));
+			mav.addObject("tmtbBrandList", morebetterService.getMorebetterBrandList(tmtbSeq, "G260_12"));
+			mav.addObject("tmtbApplyGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq, "G260_10"));
+			mav.addObject("tmtbExceptGoodsList", morebetterService.getMorebetterExceptGoodsList(tmtbSeq, "G260_10"));
 			mav.addObject("tmtbSectionValList", morebetterService.getMorebetterSectionValList(tmtbSeq));
 			mav.addObject("tmtbBurdenList", morebetterService.getMorebetterBurdenList(tmtbSeq));
-		}else{
+		} else {
 			mav.addObject("tmtbMstInfo", new MoreBetter());
 			mav.addObject("tmtbSupplyCompList", new MoreBetterGoods());
 			mav.addObject("tmtbBrandList", new MoreBetterGoods());
@@ -373,9 +391,9 @@ public class TsaMarketingController extends TsaBaseController {
 
 		mav.addObject("mode", mode);
 		mav.addObject("tmtbSeq", tmtbSeq);
-		mav.addObject("params", tmtb);
-		log.info("CHECK param tmtbSq::{}", tmtb.getTmtbSq());
-		mav.setViewName("marketing/MorebetterRegForm");
+		mav.addObject("params", moreBetter);
+		log.info("CHECK param tmtbSq::{}", moreBetter.getTmtbSq());
+		mav.setViewName("marketing/MorebetterPopupForm");
 		return mav;
 	}
 
@@ -389,87 +407,11 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@PostMapping("/morebetter/save")
 	@ResponseBody
-	public GagaResponse saveMorebetterDetail(@RequestBody MoreBetter tmtb) {
-		Collection<MoreBetterGoods> tmtbSupplyCompList = null;
-		Collection<MoreBetterGoods> tmtbBrandList = null;
-		Collection<MoreBetterGoods> tmtbApplyGoodsList = null;
-		Collection<MoreBetterGoods> tmtbExceptGoodsList = null;
-		Collection<MoreBetterBurden> tmtbBurdenList = null;
-		Collection<MoreBetterSection> tmtbSectionGbList = null;
-		ObjectMapper mapper = new ObjectMapper();
-
-		// 공급업체
-		try {
-			if (tmtb.getSupplyCompList() != null) {
-				tmtbSupplyCompList = mapper.readValue(tmtb.getSupplyCompList(), new TypeReference<Collection<MoreBetterGoods>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		// 브랜드
-		try {
-			if (tmtb.getBrandList() != null) {
-				tmtbBrandList = mapper.readValue(tmtb.getBrandList(), new TypeReference<Collection<MoreBetterGoods>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		// 적용상품
-		try {
-			if (tmtb.getApplyGoodsList() != null) {
-				tmtbApplyGoodsList = mapper.readValue(tmtb.getApplyGoodsList(), new TypeReference<Collection<MoreBetterGoods>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		// 적용상품
-		try {
-			if (tmtb.getExceptGoodsList() != null) {
-				tmtbExceptGoodsList = mapper.readValue(tmtb.getExceptGoodsList(), new TypeReference<Collection<MoreBetterGoods>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		// 할인구간
-		try {
-			if (tmtb.getSectionGbList() != null) {
-				tmtbSectionGbList = mapper.readValue(tmtb.getSectionGbList(), new TypeReference<Collection<MoreBetterSection>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		// 업체분담율
-		try {
-			if (tmtb.getBurdenList() != null) {
-				tmtbBurdenList = mapper.readValue(tmtb.getBurdenList(), new TypeReference<Collection<MoreBetterBurden>>() {
-				});
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		log.info("tmtb::{}", tmtb);
-
-		tmtb.setSupplyCompListNew(tmtbSupplyCompList);
-		tmtb.setBrandListNew(tmtbBrandList);
-		tmtb.setApplyGoodsListNew(tmtbApplyGoodsList);
-		tmtb.setExceptGoodsListNew(tmtbExceptGoodsList);
-		tmtb.setSectionGbListNew(tmtbSectionGbList);
-		tmtb.setBurdenListNew(tmtbBurdenList);
-
-		morebetterService.saveMoreBetterDetail(tmtb);
-
+	public GagaResponse saveMorebetterDetail(@RequestBody MoreBetter moreBetter) {
+		morebetterService.saveMoreBetterDetail(moreBetter);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
+
 	/**
 	 * 다다익선 공급업체 삭제
 	 *
@@ -560,4 +502,52 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 	/* // CSB 진행 */
+
+	/**
+	 * 쿠폰조회 팝업
+	 * @param returnCode - 반환할코드. 필수
+	 * @param returnName - 반환할명칭. 필수
+	 * @param cpnNm - 쿠폰명. 옵션
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 8
+	 */
+	@GetMapping("/coupon/retrieve/form")
+	@ResponseBody
+	public ModelAndView couponRetrieveForm(@RequestParam(value = "returnCode") String returnCode, @RequestParam(value = "returnName") String returnName, @RequestParam(value = "cpnNm", required = false) String cpnNm) {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("returnCode", returnCode);
+		mav.addObject("returnName", returnName);
+		mav.addObject("cpnNm", StringUtils.defaultString(cpnNm, ""));
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
+
+		// 사용가능고객구분 목록
+		mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
+
+		// 쿠폰유형 목록
+		mav.addObject("cpnTypeList", rendererService.getAvailCommonCodeList("G230"));
+
+		// 할인방식 목록
+		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
+
+		mav.setViewName("marketing/CouponRetrievePopupForm");
+
+		return mav;
+	}
+
+	/**
+	 * 쿠폰조회 목록
+	 * @param coupon - 쿠폰 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 8
+	 */
+	@PostMapping("/coupon/retrieve/list")
+	@ResponseBody
+	public Collection<Coupon> getCouponRetrieveList(@RequestBody Coupon coupon) {
+		return couponService.getCouponRetrieveList(coupon);
+	}
 }

+ 66 - 18
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -76,15 +76,12 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[1] = "G013_20";
 		ordDtlStatArr[2] = "G013_30";
 		ordDtlStatArr[3] = "G013_40";
-		
-		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
-
-		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
+		order.setOrdDtlStatArr(ordDtlStatArr);
 
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 취소사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 취소요청대상 목록
-		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
-		mav.addObject("ordNo"						, ordNo);
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));			// 취소사유
+		mav.addObject("cancelRequestTargetList"		, orderChangeService.getCancelRequestTargetList(order));	// 취소요청대상 목록
+		mav.addObject("orderInfoList"				, orderService.getOrderInfoList(order));					// 주문정보
+		mav.addObject("ordNo"						, ordNo);													// 주문번호
 
 		mav.setViewName("order/CancelRequestForm");
 		
@@ -183,21 +180,73 @@ public class TsaOrderChangeController extends TsaBaseController {
 		ordDtlStatArr[2] = "G013_60";
 		order.setOrdDtlStatArr(ordDtlStatArr);
 		
-		Collection<Order> cancelRequestTargetList = orderChangeService.getCancelRequestTargetList(order);
-
-		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
-
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
-		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
-		mav.addObject("ordNo"						, ordNo);
-		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G688"));			// 취소사유
+		mav.addObject("cancelRequestTargetList"		, orderChangeService.getCancelRequestTargetList(order));	// 취소요청대상 목록
+		mav.addObject("orderInfoList"				, orderService.getOrderInfoList(order));					// 주문정보
+		mav.addObject("ordNo"						, ordNo);													// 주문번호
+		
+		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));					// 배송정보
+		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));			// 전화번호국번
+		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));			// (휴대전화)번호국번
 
 		mav.setViewName("order/ReturnRequestForm");
 		
 		return mav;
 	}
 	
+	/**
+	 * 주문반품신청
+	 * @param Collection<Order> - 주문취소신청목록
+	 * @return
+	 * @author jsh77b
+	 * @since 2020. 12. 29
+	 */
+	@PostMapping("/returnRequest")
+	@ResponseBody
+	public GagaResponse orderReturnRequest(@RequestBody OrderChange cancelReq) {
+		
+		GagaMap mav = new GagaMap();
+		
+		if (cancelReq== null) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		List<Order> cancelReqList = cancelReq.getCancelReqList(); // 취소요청정보
+		
+		// To Do List
+		// @ 결품취소로직 현재는 일반취소로직만존재
+		// @ 주문취소 취소시 상태값 체크
+		// @ 취소, 반품시 배송비 체크 로직 
+		
+		// 1. 환불금액정보 계산 & 조회
+		mav = orderChangeService.orderCancelRefundAmt(cancelReqList);
+		
+		// 2. 주문변경기본정보 설정
+		mav.set("ordNo"			, cancelReq.getOrdNo());
+		mav.set("chgReason"		, cancelReq.getChgReason());
+		mav.set("chgMemo"		, cancelReq.getChgMemo());
+		
+		mav.set("accountNo"		, cancelReq.getAccountNo());
+		mav.set("accountNm"		, cancelReq.getAccountNm());
+		mav.set("bankCd"		, cancelReq.getBankCd());
+		
+		mav.set("allCanYn"		, cancelReq.getAllCanYn());
+		mav.set("isCustomer"	, cancelReq.getIsCustomer());
+		
+		//3. 회수지정보추가
+		mav.set("chgerNm"		, cancelReq.getChgerNm());
+		mav.set("chgerZipNo"	, cancelReq.getChgerZipNo());
+		mav.set("chgerBaseAddr"	, cancelReq.getChgerBaseAddr());
+		mav.set("chgerDtlAddr"	, cancelReq.getChgerDtlAddr());
+		mav.set("chgerPhnno"	, cancelReq.getChgerPhnno());
+		mav.set("chgerTelno"	, cancelReq.getChgerTelno());
+		
+		// 4. 주문변경 DB 등록 (주문정보, 배송정보)
+		orderChangeService.orderReturn(mav);
+		
+		return super.ok("성공");
+	}
+	
 	
 	
 	/**
@@ -268,7 +317,6 @@ public class TsaOrderChangeController extends TsaBaseController {
 		// To Do List
 		// @ 환불계좌인증
 		
-		
 		if ("Y".equals(accountCheck)) {
 			orderChangeService.saveRefundAccount(order);
 		} else {

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

@@ -7,6 +7,7 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.style24.persistence.TscPageRequest;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
@@ -33,7 +34,6 @@ 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.support.message.TscMessageByLocale;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 
@@ -104,7 +104,7 @@ public class TsaOrderController extends TsaBaseController {
 		GagaMap result = new GagaMap();
 
 		order.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		order.setPageable(new TsaPageRequest(order.getPageNo() - 1, order.getPageSize()));
+		order.setPageable(new TscPageRequest(order.getPageNo() - 1, order.getPageSize()));
 
 		// 주문상태 CD_GB 변경
 		if (order.getMultiOrdStat() != null) {

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

@@ -33,7 +33,6 @@ 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.support.message.TscMessageByLocale;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 

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

@@ -5,6 +5,7 @@ import java.util.Collection;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.style24.persistence.TscPageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.InputStreamResource;
@@ -23,7 +24,6 @@ import com.style24.admin.biz.service.TsaStockService;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.GoodsSearch;
@@ -125,7 +125,7 @@ public class TsaStockController extends TsaBaseController {
 		}
 
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
-		goodsSearch.setPageable(new TsaPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
+		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));
 
 		result.set("pageing", goodsSearch);

+ 0 - 123
src/main/java/com/style24/persistence/TsaPageRequest.java

@@ -1,123 +0,0 @@
-package com.style24.persistence;
-
-import java.io.Serializable;
-
-import lombok.Data;
-
-/**
- * Paging
- *
- * @author gagamel
- * @since 2020. 10. 5
- */
-@SuppressWarnings("serial")
-@Data
-public class TsaPageRequest implements Serializable {
-
-	private final int pageNo;   // 페이지번호
-	private final int pageSize; // 조회할 row수
-	private final int pageUnit; // 그룹핑 페이지 단위
-	private int totalCount = 0; // 전체 row 건수
-
-	public TsaPageRequest(int pageNo, int pageSize) {
-		this(pageNo, pageSize, 10);
-	}
-
-	public TsaPageRequest(int pageNo, int pageSize, int pageUnit) {
-		if (pageNo < 0) {
-			throw new IllegalArgumentException("Current page index must not be less than zero!");
-		}
-
-		if (pageSize < 1) {
-			throw new IllegalArgumentException("Page size must not be less than one!");
-		}
-
-		if (pageUnit < 1) {
-			throw new IllegalArgumentException("Page unit must not be less than one!");
-		}
-
-		this.pageNo = pageNo;
-		this.pageSize = pageSize;
-		this.pageUnit = pageUnit;
-	}
-
-	public int getPageNo() {
-		return pageNo + 1;
-	}
-
-	public int getOffset() {
-		return pageNo * pageSize;
-	}
-
-	public int getStartRow() {
-		return pageNo * pageSize + 1;
-	}
-
-	public int getEndRow() {
-		return getOffset() + pageSize;
-	}
-
-	public int getPageGroup() {
-		return pageNo / pageUnit + 1;
-	}
-
-	public void setTotalCount(int totalCount) {
-		this.totalCount = totalCount;
-	}
-
-	public int getTotalPage() {
-		int totalPage = totalCount / pageSize;
-		if (totalCount % pageSize > 0) {
-			totalPage++;
-		}
-		return totalPage;
-	}
-
-	public String getGeneratedPagination() {
-		int firstCount = (getPageGroup() - 1) * pageUnit + 1;
-		int loopCount = firstCount + pageUnit;
-		if (loopCount > getTotalPage()) {
-			loopCount = getTotalPage() + 1;
-		}
-
-		StringBuffer pageTag = new StringBuffer();
-		if (!(firstCount == 1 && loopCount == 1)) {
-			if (getPageNo() == 1) {
-				pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n");
-			} else {
-				pageTag.append("<a class=\"arrow\" href=\"#pageNo=1\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n");
-			}
-
-			if (getPageGroup() == 1) {
-				pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n");
-			} else {
-				pageTag.append("<a class=\"arrow\" href=\"#pageNo=").append((getPageGroup() - 1) * pageUnit).append("\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n");
-			}
-
-			for (int i = firstCount; i < loopCount; i++) {
-				if (getPageNo() == i) {
-					pageTag.append("<a class=\"num on\" href=\"#\">").append(i).append("</a>\n");
-				} else {
-					pageTag.append("<a class=\"num\" href=\"#pageNo=").append(i).append("\">").append(i).append("</a>\n");
-				}
-			}
-
-			if (loopCount <= (getTotalPage() + 1)) {
-				if (getPageNo() == getTotalPage()) {
-					pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n");
-					pageTag.append("<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n");
-				} else {
-					pageTag.append("<a class=\"arrow\" href=\"#pageNo=").append(getPageGroup() * pageUnit + 1).append("\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n");
-					pageTag.append("<a class=\"arrow\" href=\"#pageNo=").append(getTotalPage()).append("\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n");
-				}
-			}
-		}
-		return pageTag.toString();
-	}
-
-	@Override
-	public String toString() {
-		return String.format("Page request [pageNo: %d, pageSize %d, pageUnit %d]", getPageNo(), pageSize, pageUnit);
-	}
-
-}

+ 3 - 14
src/main/java/com/style24/persistence/domain/Coupon.java

@@ -1,9 +1,10 @@
 package com.style24.persistence.domain;
 
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 /**
@@ -43,10 +44,6 @@ public class Coupon extends TscBaseDomain {
     private String  reissuance;				// 쿠폰재발급여부(공통코드G231)
     private String  cpnStat;				// 쿠폰상태(공통코드G232)
     private String  endAlimYn;				// 만료알림여부
-    private Integer regNo;					// 등록자번호
-    private String  regDt;					// 등록일시
-    private Integer updNo;					// 수정자번호
-    private String  updDt;					// 수정일시
     private String  firstYn;				// 첫구매여부 (Y:구매이력이없음 | N:구매이력있음)
     private String  downYn;					// 다운로드가능여부(마이페이지, 상품상세) --> EP쿠폰, 난수쿠폰
     private String  custJoinStdt;			// 회원가입일자(FROM) 20200101 (신규회원여부의 판단을 가입일자로 설정함)
@@ -57,7 +54,6 @@ public class Coupon extends TscBaseDomain {
     private Integer useCnt;					// 쿠폰사용개수
     private String  payType;                 // 결제수단
     private String  custJoinYn;             // 신규회원여부
-    private String  regNm;                  // 사용자명
 
     private String  supplyCompCd;            // 공급업체코드
     private int     burdenRate;                 // 업체분담율
@@ -81,15 +77,8 @@ public class Coupon extends TscBaseDomain {
     private String  burdenList;              // 업체 분담율 리스트
     private String  cateList;                // 카테고리 리스트
 
-    private Collection<Coupon> supplyCompListNew;          // 공급업체 리스트
-    private Collection<Coupon>  brandListNew;               // 브랜드 리스트
-    private Collection<Coupon>  applyGoodsListNew;          // 적용상품 리스트
-    private Collection<Coupon>  exceptGoodsListNew;         // 제외상품 리스트
-    private Collection<Coupon>  burdenListNew;              // 업체 분담율 리스트
-    private Collection<Coupon>  cateListNew;                // 카테고리 리스트
-
     // Pagination
-    private TsaPageRequest pageable;
+    private TscPageRequest pageable;
     private int pageNo = 1;
     private int pageSize = 50;
     private int pageUnit = 10;

+ 32 - 0
src/main/java/com/style24/persistence/domain/CustomerSearch.java

@@ -0,0 +1,32 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+import lombok.Data;
+
+/**
+ * 회원 검색조건 Admin - Domain
+ *
+ * @author jsshin
+ * @since 2020. 01. 12
+ */
+@SuppressWarnings("serial")
+@Data
+public class CustomerSearch extends TscBaseDomain {
+
+	// 검색조건
+	private String searchDateGb;
+	private String searchGb;
+	private String searchTxt;
+	private String stDate;
+	private String edDate;
+
+	private String siteCd;
+	private String cellPhnno;
+	private String custGb;
+	private String custGrade;
+	private String managedRsn;
+	private String smsAgreeYn;
+	private String emailAgreeYn;
+	private String appAgreeYn;
+
+}

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

@@ -3,7 +3,6 @@ package com.style24.persistence.domain;
 import java.util.Collection;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;

+ 2 - 2
src/main/java/com/style24/persistence/domain/FreeGoodsPromotion.java

@@ -1,8 +1,8 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 import java.util.List;
@@ -46,7 +46,7 @@ public class FreeGoodsPromotion extends TscBaseDomain {
 	private String gbn;					// 팝업 구분 : C=등록, U=수정
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

+ 0 - 4
src/main/java/com/style24/persistence/domain/FreeGoodsSectionVal.java

@@ -1,11 +1,7 @@
 package com.style24.persistence.domain;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
-import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
-import java.util.Collection;
 
 /**
  * 품목 Domain

+ 7 - 4
src/main/java/com/style24/persistence/domain/Goods.java

@@ -3,9 +3,9 @@ package com.style24.persistence.domain;
 import java.util.Collection;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -92,16 +92,18 @@ public class Goods extends TscBaseDomain {
 	private String chNotiYn = "N";
 	private String chStockDataYn = "N";
 	private String chGoodsStatYn = "N";
+	private String chCfrmYn = "N";		//입점용추가
 	private int stockQtySum;
 	private String goodsImageYn;
 	private String itemkindNm;
 	private String niClsfCd;
-	private String makeNm;
+	private String originNm;
 	private String repGoodsCd;
 
 	private int currPriceOrg;
 	private String goodsStatOrg;
 	private String formalGbOrg;
+	private float sellFeeRateOrg;
 
 	private String sysImgNm;
 	private String niClsfNm;
@@ -112,7 +114,7 @@ public class Goods extends TscBaseDomain {
 	private String custGrade;
 	private String custGradeName;
 
-//	private String goodsRegMsg;
+	private String goodsRegMsg;
 	private String procJob;
 	private String excelFileNm;
 //	private String searchGb;
@@ -176,8 +178,9 @@ public class Goods extends TscBaseDomain {
 	private String goodsComposeList; // 상품 구성상품
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;
+
 }

+ 2 - 2
src/main/java/com/style24/persistence/domain/GoodsSearch.java

@@ -1,9 +1,9 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -107,7 +107,7 @@ public class GoodsSearch extends TscBaseDomain {
 	private String[] conditionList;
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

+ 5 - 12
src/main/java/com/style24/persistence/domain/MoreBetter.java

@@ -1,7 +1,7 @@
 package com.style24.persistence.domain;
 
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 import java.util.Collection;
@@ -16,15 +16,15 @@ import java.util.Collection;
 @Data
 public class MoreBetter extends TscBaseDomain {
 	// 다다익선 마스터
-	private int tmtbSq;				// 프로모션ID
+	private Integer tmtbSq;				// 프로모션ID
 	private String tmtbNm;			// 프로모션명
 	private String tmtbStat;		// 프로모션 상태
 	private String tmtbStdt;		// 프로모션 시작일
 	private String tmtbEddt;		// 프로모션 종료일
 	private String multiYn;			// 복수,단수설정
 	private String delYn;			// 삭제여부
-	private Integer regNo;			// 등록자
-	private String  regDt;			// 등록일시
+	//private Integer regNo;			// 등록자
+	//private String  regDt;			// 등록일시
 	private Integer udpNo;			// 수정자
 	private String  udtDt;			// 수정일시
 	private String searchGubun;		// 프로모션 조회 검색 구분
@@ -59,13 +59,6 @@ public class MoreBetter extends TscBaseDomain {
 	//private String burdenRate;	// 업체분담율
 	private String useYn;			// 사용여부
 
-	private Collection<MoreBetterGoods> supplyCompListNew;
-	private Collection<MoreBetterGoods> brandListNew;
-	private Collection<MoreBetterGoods> applyGoodsListNew;
-	private Collection<MoreBetterGoods> exceptGoodsListNew;
-	private Collection<MoreBetterBurden> burdenListNew;
-	private Collection<MoreBetterSection> sectionGbListNew;
-
 	private String supplyCompList;
 	private String brandList;
 	private String applyGoodsList;
@@ -74,7 +67,7 @@ public class MoreBetter extends TscBaseDomain {
 	private String sectionGbList;
 
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

+ 2 - 2
src/main/java/com/style24/persistence/domain/MoreBetterBurden.java

@@ -19,8 +19,8 @@ public class MoreBetterBurden extends TscBaseDomain {
 	private String tmtbSupplyCd;	// 업체코드
 	private String tmtbBurdenRate;	// 업체분담율
 	private String useYn;			// 사용여부
-	private Integer regNo;			// 등록자
-	private String  regDt;			// 등록일시
+	//private Integer regNo;			// 등록자
+	//private String  regDt;			// 등록일시
 	private Integer udpNo;			// 수정자
 	private String  udtDt;			// 수정일시
 

+ 4 - 6
src/main/java/com/style24/persistence/domain/MoreBetterGoods.java

@@ -1,11 +1,9 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
-import java.util.Collection;
 
 /**
  * 품목 Domain
@@ -17,14 +15,14 @@ import java.util.Collection;
 @Data
 public class MoreBetterGoods extends TscBaseDomain {
 	// 다다익선 적용대상
-	private int tmtbGoodsSq;		// 업체분담율Sq
-	private int tmtbSq;				// 프로모션Sq
+	private Integer tmtbGoodsSq;		// 업체분담율Sq
+	private Integer tmtbSq;				// 프로모션Sq
 	private String goodsGb;			// 공통코드 (G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL)
 	private String targetGb;		// 적용대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
 	private String targetVal;		// 브랜드코드, 상품코드, 공급처코드
 	private String delYn;			// 삭제여부
-	private Integer regNo;			// 등록자
-	private String  regDt;			// 등록일시
+	//private Integer regNo;			// 등록자
+	//private String  regDt;			// 등록일시
 	private Integer udpNo;			// 수정자
 	private String  udtDt;			// 수정일시
 

+ 2 - 2
src/main/java/com/style24/persistence/domain/MoreBetterSection.java

@@ -25,8 +25,8 @@ public class MoreBetterSection extends TscBaseDomain {
 	private Integer dcVal;			// 할인값
 
 	private String  delYn;			// 삭제여부
-	private Integer regNo;			// 등록자
-	private String  regDt;			// 등록일시
+	//private Integer regNo;			// 등록자
+	//private String  regDt;			// 등록일시
 	private Integer udpNo;			// 수정자
 	private String  udtDt;			// 수정일시
 

+ 4 - 2
src/main/java/com/style24/persistence/domain/Order.java

@@ -1,9 +1,9 @@
 package com.style24.persistence.domain;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -26,9 +26,11 @@ public class Order extends TscBaseDomain {
 	private String ordNm;
 	private String ordTelno;
 	private String siteCd;
+	private String siteCdNm;
 	private int npayOrdNo;
 	private String frontGb;
 	private String frontGbNm;
+	private String extmallNm;
 
 	// 주문상세
 	private int ordDtlNo;
@@ -222,7 +224,7 @@ public class Order extends TscBaseDomain {
 	private int gfcdUseAmt;
 	
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

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

@@ -16,6 +16,7 @@ public class SupplyCompany extends TscBaseDomain {
 
 	private String supplyCompCd;		// 공급업체코드
 	private String supplyCompNm;		// 공급업체명
+	private String supplyCompUcd;		// 상위공급업체코드
 	private int provierNo;				// ProvierNo(WMS)
 	private String bizGb;				// 사업자구분
 	private String bizNo;				// 사업자번호

+ 2 - 2
src/main/java/com/style24/persistence/domain/WmsGoods.java

@@ -1,8 +1,8 @@
 package com.style24.persistence.domain;
 
-import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -36,7 +36,7 @@ public class WmsGoods extends TscBaseDomain {
 	private int endRow;
 	private String goodsPriceYn;
 	// Pagination
-	private TsaPageRequest pageable;
+	private TscPageRequest pageable;
 	private int pageNo = 1;
 	private int pageSize = 50;
 	private int pageUnit = 10;

+ 12 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -7,6 +7,7 @@
 		/* TsaBusiness.getSupplyCompanyList */
 		SELECT SC.SUPPLY_COMP_CD       /*공급업체코드*/
 		     , SC.SUPPLY_COMP_NM       /*공급업체명*/
+		     , SC.SUPPLY_COMP_UCD      /*상위공급업체코드*/
 		     , SC.BIZ_GB               /*사업자구분*/
 		     , SC.BIZ_NO               /*사업자등록번호*/
 		     , SC.BIZ_KIND             /*업종*/
@@ -65,7 +66,8 @@
 		INSERT INTO TB_SUPPLY_COMPANY (
 		       SUPPLY_COMP_CD
 		     , SUPPLY_COMP_NM
-		     , PROVIER_NO
+		     , SUPPLY_COMP_UCD
+		     , PROVIDER_NO
 		     , BIZ_GB
 		     , BIZ_NO
 		     , BIZ_KIND
@@ -102,16 +104,18 @@
 		     , UPD_DT
 		)
 		VALUES (
-		       (SELECT CONCAT('S',IFNULL(LPAD(SUBSTRING(MAX(SUPPLY_COMP_CD),2) + 1,4,'0'),'0000'))
+		       (SELECT IFNULL(MAX(SUPPLY_COMP_CD),0) + 1
 		        FROM   TB_SUPPLY_COMPANY Z
-		        WHERE  SUPPLY_COMP_CD LIKE 'S%'
 		       )
 		     , #{supplyCompNm}
-		     , (SELECT CASE WHEN MAX(PROVIER_NO) IS NULL THEN 40000   /* AS-IS 최대 수보다 크게 수정해야함*/
-		               ELSE (MAX(PROVIER_NO) + 1) END
+		     , #{supplyCompUcd}
+		     , (SELECT CASE WHEN MAX(PROVIDER_NO) IS NULL THEN
+		                        40000 /* AS-IS 최대 수보다 크게 수정해야함*/
+		                    ELSE
+		                        MAX(PROVIER_NO) + 1
+		               END
 		        FROM   TB_SUPPLY_COMPANY Z
-		        WHERE  1 = 1
-		        AND PROVIER_NO > 40000                  /* AS-IS 최대 수보다 크게 크게 수정해야함*/
+		        WHERE  PROVIDER_NO > 40000 /* AS-IS 최대 수보다 크게 크게 수정해야함*/
 		       )
 		     , #{bizGb}
 		     , #{bizNo}
@@ -155,6 +159,7 @@
 		/* TsaBusiness.updateSupplyCompany */
 		UPDATE TB_SUPPLY_COMPANY
 		SET    SUPPLY_COMP_NM = #{supplyCompNm}
+		     , SUPPLY_COMP_UCD = #{supplyCompUcd}
 		     , BIZ_GB = #{bizGb}
 		     , BIZ_NO = #{bizNo}
 		     , BIZ_KIND = #{bizKind}

+ 33 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml

@@ -220,5 +220,38 @@
 		)
 	</insert>
 
+	<!-- 쿠폰조회 목록 -->
+	<select id="getCouponRetrieveList" parameterType="Coupon" resultType="Coupon">
+		/* TsaCoupon.getCouponRetrieveList */
+		SELECT A.CPN_ID                                               /*쿠폰ID*/
+		     , A.CPN_NM                                               /*쿠폰명*/
+		     , A.SITE_CD                                              /*사이트코드(공통코드G000)*/
+		     , A.USABLE_CUST_GB                                       /*사용가능고객구분(공통코드G100)*/
+		     , A.CPN_TYPE                                             /*쿠폰유형(공통코드G230)*/
+		     , A.DC_WAY                                               /*할인방식(공통코드G240)*/
+		     , A.DC_PVAL                                              /*할인값(PC). 할인방식이 금액이면 할인금액, 율이면 할인율*/
+		     , A.DC_MVAL                                              /*할인값(모바일). 할인방식이 금액이면 할인금액, 율이면 할인율*/
+		     , A.MAX_DC_AMT                                           /*최고할인값. 할인방식이 금액이면 최고할인금액, 율이면 최고할인율*/
+		     , A.PD_GB                                                /*기간/일수구분(P 기간, D 일수)*/
+		     , DATE_FORMAT(A.AVAIL_STDT,'%Y%m%d%H%i%S') AS AVAIL_STDT /*유효시작일시(기간/일수구분 "P 기간"일 때 사용됨)*/
+		     , DATE_FORMAT(A.AVAIL_EDDT,'%Y%m%d%H%i%S') AS AVAIL_EDDT /*유효종료일시(기간/일수구분 "P 기간"일 때 사용됨)*/
+		     , A.AVAIL_DAYS                                           /*유효일수(기간/일수구분 "D 일수"일 때 사용됨)*/
+		     , A.CUST_PUB_LIMIT_QTY                                   /*고객당발행제한수량(0은 무제한)*/
+		     , A.TOT_PUB_LIMIT_QTY                                    /*총발행제한수량(0은 무제한)*/
+		     , A.ONE_PUB_QTY                                          /*1회발행수량*/
+		     , A.DN_GB                                                /*다운로드구분(A:자동다운로드, D:직접다운로드). 다운로드가능여부가 "Y 다운로드가능"일 때만 사용됨*/
+		     , A.BUY_LIMIT_AMT                                        /*구매제한금액(0은 제한없음)*/
+		FROM   TB_COUPON A
+		WHERE  A.SITE_CD = #{siteCd}
+		<if test="cpnId !=null and cpnId !=''">
+			AND	   A.CPN_ID = #{cpnId}
+		</if>
+		<if test="cpnNm !=null and cpnNm !=''">
+			AND	   A.CPN_NM LIKE CONCAT('%',#{cpnNm},'%')
+		</if>
+		<if test="cpnType !=null and cpnType !=''">
+			AND	   A.CPN_TYPE = #{cpnType}
+		</if>
+	</select>
 
 </mapper>

+ 108 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaCustomerDao">
+
+	<!-- 활동회원목록 -->
+	<select id="getCustomerActiveList" parameterType="CustomerSearch" resultType="Customer">
+		/* TsaCustomer.getCustomerActiveList */
+		SELECT CUST_NO
+		     , CUST_ID
+		     , CUST_NM
+		     , PASSWD
+		     , BIRTH_YMD
+		     , BIRTH_SM
+		     , SEX_GB
+		     , CELL_PHNNO
+		     , APP_AGREE_YN
+		     , DATE_FORMAT(APP_AGREE_DT, '%Y%m%d%H%i%S') AS APP_AGREE_DT
+		     , SMS_AGREE_YN
+		     , DATE_FORMAT(SMS_AGREE_DT, '%Y%m%d%H%i%S') AS SMS_AGREE_DT
+		     , EMAIL
+		     , EMAIL_AGREE_YN
+		     , DATE_FORMAT(EMAIL_AGREE_DT, '%Y%m%d%H%i%S') AS EMAIL_AGREE_DT
+		     , HOME_POST_NO
+		     , HOME_BASE_ADDR
+		     , HOME_DTL_ADDR
+		     , SITE_CD
+		     , FRONT_GB
+		     , AF_LINK_CD
+		     , CUST_GB
+		     , CUST_GRADE
+		     , DATE_FORMAT(JOIN_DT, '%Y%m%d%H%i%S') AS JOIN_DT
+		     , FOREIGNER_YN
+		     , CUST_STAT
+		     , DATE_FORMAT(PASSWD_CHG_DT, '%Y%m%d%H%i%S') AS PASSWD_CHG_DT
+		     , TEMP_PASSWD_YN
+		     , DATE_FORMAT(LOGIN_LDT, '%Y%m%d%H%i%S') AS LOGIN_LDT
+		     , NV_JOIN_ID
+		     , NV_ACCESS_TOKEN
+		     , DATE_FORMAT(NV_JOIN_DT, '%Y%m%d%H%i%S') AS NV_JOIN_DT
+		     , KK_JOIN_ID
+		     , KK_ACCESS_TOKEN
+		     , DATE_FORMAT(KK_JOIN_DT, '%Y%m%d%H%i%S') AS KK_JOIN_DT
+		     , YS_JOIN_ID
+		     , YS_ACCESS_TOKEN
+		     , DATE_FORMAT(YS_JOIN_DT, '%Y%m%d%H%i%S') AS YS_JOIN_DT
+		     , CI
+		     , DATE_FORMAT(AUTH_DT, '%Y%m%d%H%i%S') AS AUTH_DT
+		     , MANAGED_RSN
+		     , MANAGED_DTL_RSN
+		     , MANAGED_DT
+		     , SECEDE_RSN
+		     , SECEDE_DTL_RSN
+		     , SECEDE_DT
+		     , FN_GET_USER_NM(REG_NO)              AS REG_NM
+		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		     , FN_GET_USER_NM(UPD_NO)              AS UPD_NM
+		     , DATE_FORMAT(UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		FROM   TB_CUSTOMER
+		WHERE  CUST_STAT = 'G104_10'
+		<if test="searchGb == 'custNo'">
+		AND    CUST_NO = #{searchTxt}
+		</if>
+		<if test="searchGb == 'custNm'">
+		AND    LOWER(CUST_NM) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		</if>
+		<if test="searchGb == 'email'">
+		AND    LOWER(EMAIL) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		</if>
+		<if test="searchGb == 'custId'">
+		AND    LOWER(CUST_ID) LIKE CONCAT('%',LOWER(#{searchTxt}),'%')
+		</if>
+		<if test="siteCd != null and siteCd != ''">
+		AND    SITE_CD = #{siteCd}
+		</if>
+		<if test="cellPhnno != null and cellPhnno != ''">
+		AND    CELL_PHNNO = #{cellPhnno}
+		</if>
+		<if test="custGb != null and custGb != ''">
+		AND    CUST_GB = #{custGb}
+		</if>
+		<if test="custGrade != null and custGrade != ''">
+		AND    CUST_GRADE = #{custGrade}
+		</if>
+		<if test="managedRsn != null and managedRsn != ''">
+		AND    MANAGED_RSN = #{managedRsn}
+		</if>
+		<if test="smsAgreeYn != null and smsAgreeYn != ''">
+		AND   SMS_AGREE_YN = #{smsAgreeYn}
+		</if>
+		<if test="emailAgreeYn != null and emailAgreeYn != ''">
+		AND   EMAIL_AGREE_YN = #{emailAgreeYn}
+		</if>
+		<if test="appAgreeYn != null and appAgreeYn != ''">
+		AND   APP_AGREE_YN = #{appAgreeYn}
+		</if>
+		<if test="stDate != null and edDate != '' and stDate != null and edDate != ''">
+		     <if test="searchDateGb == 'joinDt'">
+		AND   JOIN_DT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND   JOIN_DT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		     </if>
+		     <if test="searchDateGb == 'loginLdt'">
+		AND   LOGIN_LDT >= DATE_FORMAT(#{stDate}, '%Y-%m-%d %H:%i:%S')
+		AND   LOGIN_LDT <![CDATA[<]]> DATE_FORMAT(DATE_ADD(#{edDate}, INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%S')
+		     </if>
+		</if>
+	</select>
+
+</mapper>

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

@@ -6,7 +6,7 @@
 	<select id="getItemkindList" parameterType="Itemkind" resultType="Itemkind">
 		/* TsaGoods.getItemkindList */
 		SELECT ITEMKIND_CD
-		     , ITEMKIND_NMgetFreeGoodsList
+		     , ITEMKIND_NM
 		     /* , ITEMKIND_ENM*/
 		     , NI_CLSF_CD
 		     , USE_YN

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

@@ -390,6 +390,7 @@
 	<select id="getOrderInfoList" parameterType="Order" resultType="Order">
 		/* order.getOrderInfoList */
 		SELECT O.SITE_CD
+		     , FN_GET_CODE_NM('G000', O.SITE_CD) AS SITE_CD_NM
 		     , O.MALL_GB
 		     , FN_GET_CODE_NM('G011', O.MALL_GB) AS MALL_GB_NM
 		     , O.FRONT_GB
@@ -397,13 +398,17 @@
 		            THEN 'PC'
 		            ELSE 'MOBILE'
 		             END FRONT_GB_NM
-		     , OD.EXTMALL_ID 
-		     , DATE_FORMAT(O.ORD_DT,'%Y%m%d%H%i%S') AS ORD_DT
+		     , OD.EXTMALL_ID
+		     , (SELECT X.EXTMALL_NM
+		        FROM   TB_EXTMALL X
+		        WHERE  X.EXTMALL_ID = OD.EXTMALL_ID) AS EXTMALL_NM 
+		     , O.ORD_DT
 		     , O.ORD_NM
 		     , O.CUST_NO
 		     , O.ORD_NO
 		     , O.ORD_EMAIL
 		     , O.ORD_PHNNO
+		     , O.ORD_TELNO
 		     , C.CUST_GB 
 		     , CASE WHEN C.CUST_GB IS NULL 
 		            THEN '비회원'

+ 7 - 8
src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml

@@ -125,14 +125,14 @@
 			, REG_DT
 			, UPD_NO
 			, UPD_DT
-		) 
-		SELECT #{chgGb}
+		) values (
+			#{chgGb}
 			 , #{chgReason}
 			 , #{chgMemo}
-			 , ORD_NM
-			 , ORD_PHNNO
-			 , ORD_TELNO
-			 , ORD_EMAIL
+			 , #{chgerNm}
+			 , #{chgerPhnno}
+			 , #{chgerTelno}
+			 , #{chgerEmail}
 			 , #{chgerZipNo}
 			 , #{chgerBaseAddr}
 			 , #{chgerDtlAddr}
@@ -143,8 +143,7 @@
 			 , SYSDATE()
 			 , #{updNo}
 			 , SYSDATE()
-		FROM   TB_ORDER  
-		WHERE  ORD_NO = #{ordNo}
+		)
 	</insert>
 
 	<!-- 주문상세 > 주문취소신청 > 주문상세단품정보 수정 -->

+ 1 - 1
src/main/webapp/WEB-INF/views/business/BrandSearchForm.html → src/main/webapp/WEB-INF/views/business/BrandSearchPopupForm.html

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : BrandSearchForm.html
+ * @source  : BrandSearchPopupForm.html
  * @desc    : 브랜드 팝업 Page
  *============================================================================
  * STYLE24

+ 265 - 0
src/main/webapp/WEB-INF/views/customer/CustomerActiveListForm.html

@@ -0,0 +1,265 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CustomerActiveListForm.html
+ * @desc    : 활동회원목록 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.12   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div id="main">
+	<!-- 메인타이틀 영역 -->
+	<div class="main-title">
+	</div>
+	<!-- //메인타이틀 영역 -->
+
+	<!-- 메뉴 설명 -->
+	<div class="infoBox menu-desc">
+	</div>
+	<!-- //메뉴 설명 -->
+
+	<!-- 검색조건 영역 -->
+	<div class="panelStyle">
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/customer/active/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<table class="frmStyle" aria-describedby="검색조건">
+				<colgroup>
+					<col style="width:10%;"/>
+					<col style="width:20%;"/>
+					<col style="width:10%;"/>
+					<col style="width:15%;"/>
+					<col style="width:10%;"/>
+					<col style="width:20%;"/>
+					<col/>
+				</colgroup>
+				<tbody>
+				<tr>
+					<th class="dashR">검색구분</th>
+					<td class="dashR">
+						<select name="searchGb">
+							<option value="">선택</option>
+							<option value="custNo">회원번호 </option>
+							<option value="custNm">회원명 </option>
+							<option value="email">이메일</option>
+							<option value="custId">아이디</option>
+						</select>
+						<input type="text" class="w200" name="searchTxt" id="searchTxt"/>
+					</td>
+
+					<th class="dashR">사이트</th>
+					<td class="dashR">
+						<select name="siteCd"> <!-- 회원구분(공통코드G100) -->
+							<option value="">전체</option>
+							<option th:if="${siteList}" th:each="oneData, status : ${siteList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+					<th class="dashR">수신여부</th>
+					<td class="dashR">
+						<label class="chkBox">
+							<input type="checkbox" name='emailAgreeYn' value='Y'/> 메일 수신여부
+						</label>
+						<label class="chkBox">
+							<input type="checkbox" name='smsAgreeYn' value='Y'/> SMS 수신여부
+						</label>
+					</td>
+				</tr>
+				<tr>
+					<th class="dashR">회원구분</th>
+					<td class="dashR">
+						<select name="custGb"> <!-- 회원구분(공통코드G100) -->
+							<option value="">전체</option>
+							<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+
+					<th class="dashR">회원등급</th>
+					<td class="dashR">
+						<select name="custGrade"> <!-- 회원등급(공통코드G110) -->
+							<option value="">전체</option>
+							<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+
+					<th class="dashR">관리대상</th>
+					<td class="dashR">
+						<select name="managedRsn"> <!-- 관리대상지정사유(공통코드G120) -->
+							<option value="">전체</option>
+							<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+						</select>
+					</td>
+				</tr>
+				<tr>
+					<th class="dashR">휴대폰번호</th>
+					<td class="dashR" colspan="5">
+						<input type="text" class="w200" name="cellPhnno" id="cellPhnno"/>
+					</td>
+				</tr>
+				<tr>
+					<th class="dashR">조회일자</th>
+					<td class="dashR" colspan="5" >
+						<select name="searchDateGb">
+							<option value="joinDt">가입일자</option>
+							<option value="loginLdt">로그인일자</option>
+						</select>
+						<span id="terms"></span>
+					</td>
+				</tr>
+				</tbody>
+			</table>
+
+			<ul class="panelBar">
+				<li class="center">
+					<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+					<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+				</li>
+			</ul>
+		</form>
+	</div>
+	<!-- //검색조건 영역 -->
+
+	<!-- 리스트 영역 -->
+	<div class="panelStyle">
+		<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham lh60"></div>
+	</div>
+	<!-- //리스트 영역 -->
+</div>
+
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	// 사이트목록
+	const siteList = gagajf.convertToArray([[${siteList}]]);
+	// 회원구분
+	const custGbList = gagajf.convertToArray([[${custGbList}]]);
+	// 회원등급
+	const custGradeList = gagajf.convertToArray([[${custGradeList}]]);
+	// 관리대상
+	const managedRsnList = gagajf.convertToArray([[${managedRsnList}]]);
+	// 성별
+	const genderGb = {"G007_F":"여성", "G007_M":"남성"};
+
+	// specify the columns
+	const columnDefs = [
+		{
+			headerName: "사이트", field:'siteCd', width:100, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(siteList, params.data.siteCd); }
+		},
+		{headerName: "회원ID", field:'custId', width:120, cellClass: 'text-center'},
+		{headerName: "회원NO", field:'custNo', width:100, cellClass: 'text-center'},
+		{
+			headerName: "회원명", field:'custNm', width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{
+			headerName: "회원구분", field:'custGb', width:100, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(custGbList, params.data.custGb); }
+		},
+		{
+			headerName: "등급", field:'custGrade', width:100, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(custGradeList, params.data.custGrade); }
+		},
+		{
+			headerName: "관리대상", field:'managedRsn', width:230, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(managedRsnList, params.data.managedRsn); }
+		},
+		{
+			headerName: "가입일자", field:'joinDt', width:120, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.joinDt); }
+		},
+		{
+			headerName: "로그인일자", field:'loginLdt', width:120, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.loginLdt); }
+		},
+		{headerName: "핸드폰", field:'cellPhnno', width:140, cellClass: 'text-center'},
+		{headerName: "이메일", field:'email', width:220, cellClass: 'text-center'},
+		{
+			headerName: "성별", field:'sexGb', width:50, cellClass: 'text-center',
+			valueGetter: function (params) { return gagaAgGrid.lookupValue(genderGb, params.data.sexGb); }
+		},
+		{
+			headerName: "생년월일", field:'birthYmd', width:90, cellClass: 'text-center', hide:true,
+			valueGetter: function (params) { return gagaAgGrid.toDateFormat(params.data.birthYmd); }
+		},
+		{headerName: "기본주소", field:'homeBaseAddr', width:350, cellClass: 'text-center'},
+		{headerName: "상세주소", field:'homeDtlAddr', width:250, cellClass: 'text-center'},
+		{headerName: "수신동의(SMS)", field:'smsAgreeYn', width:110, cellClass: 'text-center'},
+		{headerName: "수신동의(메일)", field:'emailAgreeYn', width:110, cellClass: 'text-center'}
+	];
+
+	// Get GridOptions
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 이미지가 있을 경우 높이 지정
+	gridOptions.rowHeight = 60;
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+		 if (event.colDef.field == 'custNm') {
+			// 고객 상세
+			cfnOpenCustDetailPopup(event.data.custNo);
+		}
+	}
+
+	// 조회
+	$('#btnSearch').on('click', function() {
+		// 유효성 체크
+		let validation = fnValidationCheck();
+		if (!validation) {
+			return;
+		}
+		// Fetch data
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	var fnValidationCheck = function () {
+		// 입력 값 체크
+		const $searchGb = $('#searchForm select[name=searchGb]');	// 검색구분
+		const $searchNm = $('#searchForm input[name=searchNm]');	// 검색내용
+		let isSearchVaild = true;
+		let validationMessage;
+
+		// 검색구분: O / 검색내용: X
+		if (!gagajf.isNull($searchGb.val())) {
+			if (gagajf.isNull($searchNm.val())) {
+				validationMessage = '내용을 입력해주세요';
+				isSearchVaild = false;
+			}
+		}
+
+		// 검색구분: X / 검색내용: O
+		if (!gagajf.isNull($searchNm.val())) {
+			if (gagajf.isNull($searchGb.val())) {
+				validationMessage = '검색구분을 선택해주세요';
+				isSearchVaild = false;
+			}
+		}
+		if (!isSearchVaild) {
+			mcxDialog.alertC(validationMessage, {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$searchNm.focus();
+				}
+			});
+		}
+
+		return isSearchVaild;
+
+	}
+
+	$(document).ready(function() {
+		// 공통 달력 생성
+		cfnCreateCalendar('#terms', 'stDate', 'edDate', true);
+		$('.btnToday').trigger('click');
+
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+	/*]]>*/
+</script>
+
+</html>

+ 93 - 21
src/main/webapp/WEB-INF/views/display/GoodsCategoryForm.html

@@ -56,7 +56,7 @@
 						<td>
 							<select name="goodsStat">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${goodsStatList}" th:each="oneData, status : ${goodsStatList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 					</tr>
@@ -65,14 +65,14 @@
 						<td>
 							<select name="supplyCompCd">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>담당MD</th>
 						<td>
 							<select name="mdId">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${mdIdList}" th:each="oneData, status : ${mdIdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${mdIdList}" th:each="oneData, status : ${mdIdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>브랜드/품목</th>
@@ -83,7 +83,7 @@
 							</select>
 							<select name="itemkindCd">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${itemkindList}" th:each="oneData, status : ${itemkindList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 					</tr>
@@ -92,7 +92,7 @@
 						<td>
 							<select name="formalGb">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${formalList}" th:each="oneData, status : ${formalList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${formalGbList}" th:each="oneData, status : ${formalGbList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>재고수량</th>
@@ -103,11 +103,11 @@
 						<td>
 							<select name="styleYear">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${styleYearList}" th:each="oneData, status : ${styleYearList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${styleYearList}" th:each="oneData, status : ${styleYearList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 							<select name="seasonCd">
 								<option value=''>[전체]</option>
-								<!--<option th:if="${seasonCdList}" th:each="oneData, status : ${seasonCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>-->
+								<option th:if="${seasonList}" th:each="oneData, status : ${seasonList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>판매가</th>
@@ -127,14 +127,10 @@
 						</td>
 						<th>반품/교환</th>
 						<td colspan='3'>
-							<label><input type="checkbox" id="changeableYn">반품불가</label>
-							<input type="hidden" name="changeableYn" class="formControl">
-							<label><input type="checkbox" id="returnableYn">교환불가</label>
-							<input type="hidden" name="returnableYn" class="formControl">
-							<label><input type="checkbox" id="returnFeeFreeYn">무료반품</label>
-							<input type="hidden" name="returnFeeFreeYn" class="formControl">
-							<label><input type="checkbox" id="changeFeeFreeYn">무료교환</label>
-							<input type="hidden" name="changeFeeFreeYn" class="formControl">
+							<label class="chkBox"><input type="checkbox" name="changeableYn"/>반품불가</label>
+							<label class="chkBox"><input type="checkbox" name="returnableYn"/>교환불가</label>
+							<label class="chkBox"><input type="checkbox" name="returnFeeFreeYn"/>무료반품</label>
+							<label class="chkBox"><input type="checkbox" name="changeFeeFreeYn"/>무료교환</label>
 						</td>
 						<th>할인율(%)</th>
 						<td>
@@ -144,11 +140,9 @@
 					</tr>
 					<tr>
 						<th>기간</th>
-						<td id="sellTerms" colspan='7'></td>
-					</tr>
-					<tr>
+						<td id="sellTerms" colspan='5'></td>
 						<th>전시여부</th>
-						<td colspan='7'>
+						<td>
 							<select name="useYn">
 								<option value=''>[전체]</option>
 								<option value='Y'>[Y] Yes</option>
@@ -157,13 +151,43 @@
 						</td>
 					</tr>
 				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#goodsCateForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
 			</form>
 		</div>
 		<!-- 검색조건 영역 -->
 
 		<!-- 리스트 영역 -->
 		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham"></div>
+			<!-- 상단버튼 영역  -->
+			<ul class="panelBar">
+				<li>
+					<button type="button" class="btn btn-default btn-lg" onclick="cfnDownloadSampleFile('SF003');">상품엑셀조회 양식 다운로드</button>
+					<button type="button" class="btn btn-base btn-lg" id="btnGoodsExcelUpLoad">엑셀조회</button>
+				</li>
+				<li class="aR">
+					검색결과 : <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">
+						<option value="50" selected="selected">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<!-- //상단버튼 영역  -->
+			<div id="gridList" style="width: 100%; height: 500px;" class="ag-theme-balham lh60"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="goodsListPagination"></div>
+				</li>
+			</ul>
 		</div>
 		<!-- //리스트 영역 -->
 		
@@ -198,14 +222,62 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
+	var columnDefs = [];
+	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 cfnGridNumner('searchForm',params.node.rowIndex, 'A');}
+		},
+		{headerName: "이미지", field: "sysImgNm", width: 100, height: 60, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<img width="60" src="'+ _goodsUrl+ "/" + params.value + '" alt=""  onerror="this.src=\'/image/no.gif\';"/>';
+			}
+		},
+		{headerName: "상품코드", field: "goodsCd", width: 140, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "상품명", field: "goodsNm", width: 200, cellClass: 'text-left'},
+		{headerName: "품목명", field: "itemkindNm", width: 250, cellClass: 'text-left'},
+		{headerName: "기존품목코드", field: "itemkindCd", width: 150, cellClass: 'text-center' },
+		{headerName: "변경품목코드", field: "itemkindCdNew", width: 150, cellClass: 'text-center', editable : true,
+			cellEditor: 'textCellEditor',
+			cellEditorParams: { maxlength: 5, required: true, onblur: '$(this).val($(this).val().toUpperCase())' }
+		}
+	];
+
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복 선택 가능
+	gridOptions.rowSelection = 'multiple';
+	gridOptions.suppressRowClickSelection = true;
+	gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+
+	gridOptions.stopEditingWhenGridLosesFocus = true;
+
+	// 업체변경시
+	$('#goodsCateForm select[name=supplyCompCd]').on('change', function() {
+		var actionUrl = '/renderer/supplyCompany/brand/list/' + $(this).val();
+
+		if(sessRoleCd == "G001_B000"){
+			actionUrl = '/renderer/brand/AuthBrandlist';
+		}
+		$("#goodsCateForm select[name=brandCd] option:gt(0)").remove();
+
+		cfnCreateCombo(actionUrl, $('#goodsCateForm select[name=brandCd]'), "[전체]", "");
+	});
+
 $(document).ready(function() {
 
 	cfnCreateCalendar('#sellTerms', 'searchStdt', 'searchEddt', true, '기간', 'X');
 
 	// Create a agGrid
-	//gagaAgGrid.createGrid('gridList', gridOptions);
+	gagaAgGrid.createGrid('gridList', gridOptions);
 
 });
+
 /*]]>*/
 </script>
 

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

@@ -54,7 +54,7 @@
 		
 		<!-- 리스트 영역 -->
 		<div class="panelStyle">
-			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham lh70"></div>
+			<div id="gridList" style="width: 100%; height: 470px" class="ag-theme-balham lh60"></div>
 		</div>
 		
 		<!-- 등록/수정 -->
@@ -215,7 +215,7 @@
 	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 
 	// 이미지가 있을 경우 높이 지정
-	gridOptions.rowHeight = 70;
+	gridOptions.rowHeight = 60;
 	
 	// 셀 클릭 이벤트
 	gridOptions.onCellClicked = function(event) {
@@ -293,5 +293,4 @@
 /*]]>*/
 </script>
 
->>>>>>> develop
 </html>

+ 9 - 5
src/main/webapp/WEB-INF/views/marketing/CouponCreatePopupForm.html

@@ -662,7 +662,7 @@
 
 			// 중복되지 않은 데이터 리스트에 추가
 			if(addChk) {
-				gagaAgGrid.addRowData(brandGridOptions, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_12"});
+				gagaAgGrid.addRowData(brandGridOptions, {"brandCd" : result[i].brandCd, "brandEnm" : result[i].brandEnm, "supplyCompNm" : result[i].supplyCompNm});
 			}
 		}
 	};
@@ -691,7 +691,7 @@
 
 			// 중복되지 않은 데이터 리스트에 추가
 			if(addChk) {
-				gagaAgGrid.addRowData(supplyGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
+				gagaAgGrid.addRowData(supplyGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm});
 			}
 		}
 	};
@@ -720,7 +720,7 @@
 
 			// 중복되지 않은 데이터 리스트에 추가
 			if(addChk) {
-				gagaAgGrid.addRowData(cateGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm, "targetGb" : "G260_13"});
+				gagaAgGrid.addRowData(cateGridOptions, {"supplyCompCd" : result[i].supplyCompCd, "supplyCompNm" : result[i].supplyCompNm});
 			}
 		}
 	}
@@ -772,7 +772,7 @@
 			// 중복되지 않은 데이터 리스트에 추가
 			if(addChk) {
 				//gagaAgGrid.addRowData(OriginGridListOption, result[i], "goodsCd");
-				gagaAgGrid.addRowData(OriginGridListOption, {"goodsGb": goodsGbVal, "goodsCd" : result[i].goodsCd, "goodsNm" : result[i].goodsNm, "targetGb" : "G260_10"});
+				gagaAgGrid.addRowData(OriginGridListOption, {"goodsGb": goodsGbVal, "goodsCd" : result[i].goodsCd, "goodsNm" : result[i].goodsNm});
 			}
 		}
 	}
@@ -892,7 +892,7 @@
 		// 적용대상 - 브랜드 그리드 전체값 세팅
 		var brandAllData = gagaAgGrid.getAllRowData(brandGridOptions);
 		var jsonBrandData = JSON.stringify(brandAllData);
-		$('#couponCreateForm #brandlist').val(jsonBrandData);
+		$('#couponCreateForm #brandList').val(jsonBrandData);
 		// // 적용대상 - 카테고리 그리드 전체값 세팅
 		var cateAllData = gagaAgGrid.getAllRowData(cateGridOptions);
 		var jsonCateData = JSON.stringify(cateAllData);
@@ -905,6 +905,10 @@
 		var exceptGoodsAllData = gagaAgGrid.getAllRowData(excepGoodsGridOptions);
 		var jsonExceptGoodsData = JSON.stringify(exceptGoodsAllData);
 		$('#couponCreateForm #excepGoodsList').val(jsonExceptGoodsData);
+		// 입점업체분담율 그리드 전체값 세팅
+		var inCompBurdenAllData = gagaAgGrid.getAllRowData(inComGridOptions);
+		var jsonInCompBurdenData = JSON.stringify(inCompBurdenAllData);
+		$('#couponCreateForm #burdenList').val(jsonInCompBurdenData);
 
 	}
 

+ 7 - 4
src/main/webapp/WEB-INF/views/marketing/CouponRetrieveForm.html → src/main/webapp/WEB-INF/views/marketing/CouponRetrievePopupForm.html

@@ -3,7 +3,7 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : CouponRetrieveForm.html
+ * @source  : CouponRetrievePopupForm.html
  * @desc    : 쿠폰조회 팝업 Page
  *============================================================================
  * STYLE24
@@ -98,7 +98,7 @@
 	let dcWayList = gagajf.convertToArray([[${dcWayList}]]);
 	
 	let columnDefsCouponList = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+// 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{
 			headerName: "사이트", field: "siteCd", width: 80, cellClass: "text-center", pinned: 'left',
 			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteList, params.value); }
@@ -167,7 +167,10 @@
 	];
 
 	let gridOptionsCouponList = gagaAgGrid.getGridOptions(columnDefsCouponList);
-
+	
+	gridOptionsCouponList.rowSelection = 'single';
+	gridOptionsCouponList.rowMultiSelectWithClick = true; // 클릭으로 선택 가능
+	
 	// Row double click
 	gridOptionsCouponList.onRowDoubleClicked = function(event) {
 		$('#btnConfirmCoupon').trigger('click');
@@ -190,7 +193,7 @@
 	// 확인
 	$('#btnConfirmCoupon').on('click', function() {
 		var selectedData = gagaAgGrid.selectedRowData(gridOptionsCouponList);
-		
+		console.log('selectedData.length: ' + selectedData.length);
 		if (selectedData.length == 0) {
 			mcxDialog.alert('선택된 쿠폰이 없습니다.');
 			return false;

+ 3 - 2
src/main/webapp/WEB-INF/views/marketing/MorebetterRegForm.html → src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html

@@ -3,7 +3,7 @@
 	  xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : MorebetterRegForm.html
+ * @source  : MorebetterPopupForm.html
  * @desc    : 다다익선 등록 화면
  *============================================================================
  * STYLE24
@@ -67,7 +67,7 @@
 						<td>
 							<!-- 상태 입력 : before
                             <input class="w50p" type="text" id="disTmtbStat" name="disTmtbStat" maxlength="30" th:value="${params.tmtbStat}" disabled=""/>-->
-							<label class="rdoBtn" th:if="${tmtbStatList}" th:each="oneData, status : ${tmtbStatList}" ><input type="radio" id="disTmtbStat" name="disTmtbStat" th:value="${oneData.cd}" th:text="${oneData.cdNm}" required="required" data-valid-name="상태"/></label>
+							<label class="rdoBtn" th:if="${tmtbStatList}" th:each="oneData, status : ${tmtbStatList}" ><input type="radio" id="disTmtbStat" name="disTmtbStat" th:value="${oneData.cd}" th:text="${oneData.cdNm}" data-valid-name="상태"/></label>
 							<input type="hidden" id="tmtbStat" name="tmtbStat"/>
 						</td>
 					</tr>
@@ -410,6 +410,7 @@
 	gridOptionsFGExceptGoodsList.rowSelection = "multiple";
 	// 업체분담율 리스트 설정
 	var gridOptionsApplyBurdenList = gagaAgGrid.getGridOptions(columnApplyBurdenList);
+	gridOptionsApplyBurdenList.defaultColDef.editable = true;
 	gridOptionsApplyBurdenList.rowSelection = "multiple";
 	// 구간 할인/혜택 설정
 	var gridOptionsSectionGbList = gagaAgGrid.getGridOptions(columnSectionGbList);

+ 31 - 14
src/main/webapp/WEB-INF/views/order/CancelRequestForm.html

@@ -899,19 +899,27 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var arrREasonCd = reasonCd.split(":");
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G686_10'];
+
+	isCustomer = false;
 	
 	// 취소, 반품, 교환 사유 판단
-	if (arrREasonCd[0] == 'G686_10') {
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
 		$("#imputeReason").text("고객");
-		isCustomer = true;
 	} else {
 		$("#imputeReason").text("회사");
-		isCustomer = false;
 	}
 
-	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
 
 	fnCalculateRefundAmt();			//환불예정금액 계산.
 }
@@ -971,6 +979,12 @@ var fnCancelRequestPartOk = function () {
 		bankCd 		= refundAccount[0].bankCd;
 	}
 	
+	// 5. 추가정보설정
+	var chgerNm 	= orderInfoList[0].ordNm;
+	var chgerEmail 	= orderInfoList[0].ordEmail;
+	var chgerPhnno 	= orderInfoList[0].ordPhnno;
+	var chgerTelno 	= orderInfoList[0].ordTelno;
+	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
 		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
@@ -981,6 +995,13 @@ var fnCancelRequestPartOk = function () {
 		,"bankCd" 			: bankCd
 		,"allCanYn" 		: allCanYn
 		,"isCustomer" 		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipNo"		: ""
+		,"chgerBaseAddr"	: ""
+		,"chgerDtlAddr"		: ""
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1021,26 +1042,22 @@ var fnBindOrderRfAccountInfo = function () {
 };
 
 $(document).ready(function() {
-	// 1. Create a agGrid
+	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
 	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	
 	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
 	
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
 	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
 	
-	// 취소정보계산
+	// 2. 환불정보계산
 	fnCalculateRefundAmt(null);
 	
-	// 그리드 숨김처리
+	// 3. 무통장입금아일때 환불계좌 그리드 숨김처리
 	if (payMeans !== 'G014_20') {
 		$('#wrapRefundAccount').addClass("off");
-	}
-	
-	if (payMeans === 'G014_20' && mallGb === 'G011_10' ) {
-		// 환불계좌정보
 		fnBindOrderRfAccountInfo();
 	}
 });

+ 82 - 13
src/main/webapp/WEB-INF/views/order/OrderDetailForm.html

@@ -28,7 +28,61 @@
 				<input type="hidden" name="orderEmail"/>
 				
 				<h4>기본정보</h4>
-				<div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div>
+				<!-- <div id="gridOrderInfo" style="width:100%; height:100px;" class="ag-theme-balham"></div> -->
+
+				<!-- TABLE -->
+				<table class="tableStyle">
+					<colgroup>
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+						<col width="">
+					</colgroup>
+					<thead>
+						<tr>
+							<th>사이트</th>
+							<th>몰구분</th>
+							<th>웹구분</th>
+							<th>외부몰</th>
+							<th>주문일시</th>
+							<th>주문자</th>
+							<th>고객번호</th>
+							<th>주문번호</th>
+							<th>이메일</th>
+							<th>핸드폰번호</th>
+							<th>회원구분</th>
+							<th>관리대상</th>
+							<th>등급</th>
+						</tr>
+					</thead>
+					<tbody>
+						<tr>
+							<td th:text="${orderInfo[0].siteCdNm}"></td>
+							<td th:text="${orderInfo[0].mallGbNm}"></td>
+							<td th:text="${orderInfo[0].frontGbNm}"></td>
+							<td th:text="${orderInfo[0].extmallNm}"></td>
+							<td th:text="${orderInfo[0].ordDt}"></td>
+							<td th:text="${orderInfo[0].ordNm}"></td>
+							<td th:text="${orderInfo[0].custNo}"></td>
+							<td th:text="${orderInfo[0].ordNo}"></td>
+							<td th:text="${orderInfo[0].ordEmail}"></td>
+							<td th:text="${orderInfo[0].ordPhnno}"></td>
+							<td th:text="${orderInfo[0].custGbNm}"></td>
+							<td th:text="${orderInfo[0].managedRsnNm}"></td>
+							<td th:text="${orderInfo[0].custGradeNm}"></td>
+						</tr>
+					</tbody>
+				</table>
+				<!-- //TABLE -->
 									
 				<h4>주문상품정보</h4>
 				<button type="button" class="btn btnRight btn-base btn-sm off" id="btnExchange" style="margin-left:10px;" >교환요청</button>
@@ -163,6 +217,10 @@ var orderAgGrid = {
 	}
 }
 
+// 그리드 추가
+//gagaAgGrid.createGrid('gridList', gridOptions);
+//gagaAgGrid.hideStatusBar('gridList');
+
 // 1.주문기본정보 그리드 바인딩
 var columnDefsOrderInfo = [
 	{
@@ -219,7 +277,7 @@ var columnDefsOrderInfo = [
 	{headerName: "관리대상"	, field: "managedRsnNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "등급"		, field: "custGradeNm"	, width: 80		, cellClass: 'text-center'}
 ];
-var gridOptionsOrderInfo = orderAgGrid.getGridOptions(columnDefsOrderInfo);
+var gridOptionsOrderInfo = gagaAgGrid.getGridOptions(columnDefsOrderInfo);
 
 // 2.상품별 상세정보
 var columnDefsGoodsInfo = [
@@ -515,7 +573,7 @@ var columnDefsGoodsInfo = [
 		]
 	}
 ];
-var gridOptionsGoodsInfo = orderAgGrid.getGridOptions(columnDefsGoodsInfo);
+var gridOptionsGoodsInfo = gagaAgGrid.getGridOptions(columnDefsGoodsInfo);
 
 // 2.5 주문사은품정보
 var columnDefsOrderFreeGiftInfo = [
@@ -541,7 +599,7 @@ var columnDefsOrderFreeGiftInfo = [
 	{headerName: "옵션코드2"		, field: "optCd2"			, width: 100, cellClass: 'text-center'},
 	{headerName: "삭제여부"		, field: "delYn"			, width: 100, cellClass: 'text-center'}
 ];
-var gridOptionsOrderFreeGiftInfo = orderAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
+var gridOptionsOrderFreeGiftInfo = gagaAgGrid.getGridOptions(columnDefsOrderFreeGiftInfo);
 
 // 3.배송정보
 var columnDefsDeliveryInfo = [
@@ -562,7 +620,7 @@ var columnDefsDeliveryInfo = [
 	{headerName: "주소(상세)"		, field: "recipDtlAddr"		, width: 200, cellClass: 'text-left', editable: true},
 	{headerName: "배송메모"		, field: "delvMemo"			, width: 280, cellClass: 'text-left', editable: true}
 ];
-var gridOptionsDeliveryInfo = orderAgGrid.getGridOptions(columnDefsDeliveryInfo);
+var gridOptionsDeliveryInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryInfo);
 
 // 4.결제정보
 var columnDefsPaymentInfo = [
@@ -610,7 +668,7 @@ var columnDefsPaymentInfo = [
 	},
 	{headerName: "계좌만료일"	, field: "vaDeadline"	, width: 150	, cellClass: 'text-center'}
 ];
-var gridOptionsPaymentInfo = orderAgGrid.getGridOptions(columnDefsPaymentInfo);
+var gridOptionsPaymentInfo = gagaAgGrid.getGridOptions(columnDefsPaymentInfo);
 
 // 5.배송비
 var columnDefsDeliveryFeeInfo = [
@@ -635,7 +693,7 @@ var columnDefsDeliveryFeeInfo = [
 		}
 	}
 ];
-var gridOptionsDeliveryFeeInfo = orderAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
+var gridOptionsDeliveryFeeInfo = gagaAgGrid.getGridOptions(columnDefsDeliveryFeeInfo);
 
 // 6. 반품/교환 정보
 var columnDefsOrderChangeInfo = [
@@ -717,7 +775,7 @@ var columnDefsOrderChangeInfo = [
 	},
 	{headerName: "회수송장번호", field: "wdInvoiceNo", width: 90, cellClass: 'text-center'}
 ];
-var gridOptionsOrderChangeInfo = orderAgGrid.getGridOptions(columnDefsOrderChangeInfo);
+var gridOptionsOrderChangeInfo = gagaAgGrid.getGridOptions(columnDefsOrderChangeInfo);
 
 // 7.환불정보
 var columnDefsRefundInfo = [
@@ -745,7 +803,7 @@ var columnDefsRefundInfo = [
 	},
 	{headerName: "환불처리자"		, field: "updNm"		, width: 120		, cellClass: 'text-center'}
 ];
-var gridOptionsRefundInfo = orderAgGrid.getGridOptions(columnDefsRefundInfo);
+var gridOptionsRefundInfo = gagaAgGrid.getGridOptions(columnDefsRefundInfo);
 
 // 8.상담내역
 var columnDefsOrderCounselInfo = [
@@ -781,7 +839,7 @@ var columnDefsOrderCounselInfo = [
 	{headerName: "답변자"			, field: "ansNm"	, width: 80		, cellClass: 'text-center'},
 	{headerName: "삭제여부"		, field: "delYn"	, width: 80		, cellClass: 'text-center'}
 ];
-var gridOptionsOrderCounselInfo = orderAgGrid.getGridOptions(columnDefsOrderCounselInfo);
+var gridOptionsOrderCounselInfo = gagaAgGrid.getGridOptions(columnDefsOrderCounselInfo);
 
 // 9.주문메모
 var columnDefsOrderMemoInfo = [
@@ -821,7 +879,7 @@ var columnDefsOrderMemoInfo = [
 		}
 	},
 ];
-var gridOptionsOrderMemoInfo = orderAgGrid.getGridOptions(columnDefsOrderMemoInfo);
+var gridOptionsOrderMemoInfo = gagaAgGrid.getGridOptions(columnDefsOrderMemoInfo);
 </script>
 
 <script>
@@ -871,7 +929,7 @@ var fnOrderDetailClose = function(){
 $(document).ready(function () {
 	
 	// 1. 그리드 그리기
-	gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
+	//gagaAgGrid.createGrid('gridOrderInfo'					, gridOptionsOrderInfo);			// 기본정보
 	gagaAgGrid.createGrid('gridOrderGoodsInfo'				, gridOptionsGoodsInfo);			// 상품정보
 	gagaAgGrid.createGrid('gridOrderFreeGiftInfo'			, gridOptionsOrderFreeGiftInfo);	// 사은품정보
 	gagaAgGrid.createGrid('gridDeliveryAddrInfo'			, gridOptionsDeliveryInfo);			// 배송정보
@@ -883,7 +941,7 @@ $(document).ready(function () {
 	gagaAgGrid.createGrid('gridOrderMemoInfo'				, gridOptionsOrderMemoInfo);		// 관리자메모
 	
 	// 2. 그리드 데이터 바인딩
-	gridOptionsOrderInfo.api.setRowData(orderInfo);									// 기본정보
+	//gridOptionsOrderInfo.api.setRowData(orderInfo);								// 기본정보
 	gridOptionsGoodsInfo.api.setRowData(orderGoodsInfo);							// 상품정보
 	gridOptionsOrderFreeGiftInfo.api.setRowData(orderFreeGiftInfo);					// 사은품품정보
 	gridOptionsDeliveryInfo.api.setRowData(orderDeliveryAddrInfo);					// 배송정보
@@ -894,6 +952,17 @@ $(document).ready(function () {
 	gridOptionsOrderCounselInfo.api.setRowData(orderCounselInfo);					// 상담내역
 	gridOptionsOrderMemoInfo.api.setRowData(orderAdminMemoInfo);					// 관리자메모
 	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderGoodsInfo');
+	gagaAgGrid.hideStatusBar('gridOrderFreeGiftInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryAddrInfo');
+	gagaAgGrid.hideStatusBar('gridPaymentInfo');
+	gagaAgGrid.hideStatusBar('gridDeliveryFeeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderChangeInfo');
+	gagaAgGrid.hideStatusBar('gridOrderRefundInfo');
+	gagaAgGrid.hideStatusBar('gridOrderCounselInfo');
+	gagaAgGrid.hideStatusBar('gridOrderMemoInfo');
+	
 	// 3. 그리드 높이 설정
 	fnSetGridHeightInit();
 	

+ 103 - 24
src/main/webapp/WEB-INF/views/order/ReturnRequestForm.html

@@ -136,15 +136,15 @@
 					<tbody>
 						<tr>
 							<th>보내는사람 <i class="star"></i></th>
-							<td colspan="3"><input type="text" name ="chgerNm" class="" /></td>
+							<td colspan="3"><input type="text" name ="chgerNm" class=""/></td>
 						</tr>
 						<tr>
 							<th>회수지주소 <i class="star"></i></th>
 							<td colspan="3">
-								<input type="text" name ="chgerZipNo" class="w100" readonly="readonly" />
+								<input type="text" name ="chgerZipNo" class="w100" readonly="readonly"/>
 								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
-								<input type="text" name ="chgerBaseAddr" class="w300" />
-								<input type="text" name ="chgerDtlAddr" class="w300" />
+								<input type="text" name ="chgerBaseAddr" class="w300"/>
+								<input type="text" name ="chgerDtlAddr" class="w300"/>
 							</td>
 						</tr>
 						<tr>
@@ -188,6 +188,7 @@ var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 취소대상
 var ordNo 					= [[${ordNo}]];									// 주문번호
 var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
 var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var orderDelvRtnAddrInfo	= [[${orderDelvRtnAddrInfo}]];					// 회수지정보
 
 var temp1 = true;
 var temp2 = false;
@@ -951,19 +952,27 @@ var fnCalculateRefundAmt = function (obj) {
 
 //  사유
 var fnChangeChgReason = function(reasonCd){
-	var arrREasonCd = reasonCd.split(":");
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G688_10', 'G688_11', 'G688_12', 'G688_13', 'G688_15' , 'G688_21', 'G688_30'];
+
+	isCustomer = false;
 	
 	// 취소, 반품, 교환 사유 판단
-	if (arrREasonCd[0] == 'G686_10') {
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
 		$("#imputeReason").text("고객");
-		isCustomer = true;
 	} else {
 		$("#imputeReason").text("회사");
-		isCustomer = false;
 	}
 
-	$('#cancelRequestFrm input[name=chgReason]').val(arrREasonCd[0]);
-	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrREasonCd[1]);
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
 	
 	//환불예정금액 계산.
 	fnCalculateRefundAmt();			
@@ -1002,7 +1011,8 @@ var fnCancelRequestPartOk = function () {
 	var chgReason = $("#cancelRequestFrm select[name=selectChgReason]").val();
 	
 	if (gagajf.isNull(chgReason)) {
-		mcxDialog.alert("취소사유를 입력하세요."); return ;
+		mcxDialog.alert("취소사유를 입력하세요."); 
+		return ;
 	}
 	
 	// 4. 환불계좌 체크
@@ -1010,6 +1020,7 @@ var fnCancelRequestPartOk = function () {
 	var accountNm 	= "";
 	var bankCd 		= "";
 	
+	// 결제타입이 무통장 입금일때 사용
 	if (payMeans == 'G014_20') {
 		var refundAccount = gridOptionsRefundAccountInfo.api.getSelectedRows();
 		
@@ -1023,6 +1034,44 @@ var fnCancelRequestPartOk = function () {
 		bankCd 		= refundAccount[0].bankCd;
 	}
 	
+	// 5. 회수지정보설정
+	var chgerNm			= $("#cancelRequestFrm input[name=chgerNm]").val();
+	var chgerZipNo		= $("#cancelRequestFrm input[name=chgerZipNo]").val();
+	var chgerBaseAddr	= $("#cancelRequestFrm input[name=chgerBaseAddr]").val();
+	var chgerDtlAddr	= $("#cancelRequestFrm input[name=chgerDtlAddr]").val();
+	
+	var chgerPhnno1		= $("#cancelRequestFrm select[name=chgerPhnno1]").val();
+	var chgerPhnno2		= $("#cancelRequestFrm input[name=chgerPhnno2]").val();
+	var chgerPhnno3		= $("#cancelRequestFrm input[name=chgerPhnno3]").val();
+	
+	var chgerTelno1		= $("#cancelRequestFrm select[name=chgerTelno1]").val();
+	var chgerTelno2		= $("#cancelRequestFrm input[name=chgerTelno2]").val();
+	var chgerTelno3		= $("#cancelRequestFrm input[name=chgerTelno3]").val();
+
+	if (gagajf.isNull(chgerZipNo)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerBaseAddr)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerDtlAddr)) {
+		mcxDialog.alert("회수지주소를 입력하세요."); return;
+	}
+	
+	if (gagajf.isNull(chgerPhnno1)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerPhnno2)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(chgerPhnno3)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	
+	var chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
+	var chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
+	var chgerEmail 		= orderInfoList[0].ordEmail;
+	
 	var jsonObj = {
 		"ordNo"				: $('#cancelRequestFrm input[name=ordNo]').val()
 		,"chgReason" 		: $('#cancelRequestFrm input[name=chgReason]').val()
@@ -1033,6 +1082,13 @@ var fnCancelRequestPartOk = function () {
 		,"bankCd" 			: bankCd
 		,"allCanYn" 		: allCanYn
 		,"isCustomer"		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipNo"		: chgerZipNo
+		,"chgerBaseAddr"	: chgerBaseAddr
+		,"chgerDtlAddr"		: chgerDtlAddr
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
 	}
 
 	// 주문번호, 취소사유, 취소메모, (취소, 반품, 교환 신청 정보 목록), 환불계좌
@@ -1043,7 +1099,7 @@ var fnCancelRequestPartOk = function () {
 		sureBtnClick		: function(){
 			// 취소 실행
 			gagajf.ajaxJsonSubmit(
-				'/orderChange/return/'
+				'/orderChange/returnRequest/'
 				, jsonData
 				, function() {
 					uifnPopupClose('popupOrderDetail');
@@ -1075,11 +1131,11 @@ var fnBindOrderRfAccountInfo = function () {
 // 우편번호 DAUM을 이용한 우편번호 팝업 레이어
 var fnOpenDaumAddr = function() {
 	let daumZip = new daum.Postcode({
-		oncomplete: function(data) {
+		oncomplete: function(data) {			
 			// 우편번호와 주소 정보를 해당 필드에 넣는다.
-			$('#detailForm input[name=chgerZipNo]').val(data.zonecode);
-			$('#detailForm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
-			$('#detailForm input[name=chgerDtlAddr]').focus();
+			$('#cancelRequestFrm input[name=chgerZipNo]').val(data.zonecode);
+			$('#cancelRequestFrm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
+			$('#cancelRequestFrm input[name=chgerDtlAddr]').focus();
 			
 			cfnCloseDaumAddr();
 		},
@@ -1089,29 +1145,52 @@ var fnOpenDaumAddr = function() {
 	cfnOpenDaumAddr(daumZip);
 }
 
+// 회수지정보 셋팅
+var fnSetChger = function(){
+	var data = orderDelvRtnAddrInfo[0];
+	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
+	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
+	
+	$("#cancelRequestFrm input[name=chgerNm]").val(data.recipNm);
+	$("#cancelRequestFrm input[name=chgerZipNo]").val(data.recipZipNo);
+	$("#cancelRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
+	$("#cancelRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
+	
+	if (spRecipPhnno) {
+		$("#cancelRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
+		$("#cancelRequestFrm input[name=chgerPhnno2]").val(spRecipPhnno[1]);
+		$("#cancelRequestFrm input[name=chgerPhnno3]").val(spRecipPhnno[2]);
+	}
+	
+	if (spRecipTelno) {
+		$("#cancelRequestFrm select[name=chgerTelno1]").val(spRecipTelno[0]);
+		$("#cancelRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
+		$("#cancelRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
+	}
+}
+
 $(document).ready(function() {
-	// 1. Create a agGrid
+	// 1. 그리드생성
 	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsCancelReqList);			// 주문정보
 	gridOptionsCancelReqList.api.setRowData(cancelRequestTargetList);
 	
 	gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsCancelReqToBeList);		// 취소정보
 	
-	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비 정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
 	
 	gagaAgGrid.createGrid('gridRefundAccountInfo'			, gridOptionsRefundAccountInfo);		// 환불계좌정보
 	
-	// 취소정보계산
+	// 2. 환불정보계산
 	fnCalculateRefundAmt(null);
 	
-	// 그리드 숨김처리
+	// 3. 무통장입금아일때 환불계좌 그리드 숨김처리
 	if (payMeans !== 'G014_20') {
 		$('#wrapRefundAccount').addClass("off");
-	}
-	
-	if (payMeans === 'G014_20' && mallGb === 'G011_10' ) {
-		// 환불계좌정보
 		fnBindOrderRfAccountInfo();
 	}
+	
+	// 4. 회수지정보설정
+	fnSetChger();
 });
 </script>
 </html>

+ 34 - 32
src/main/webapp/ux/css/admin.ui.css

@@ -80,8 +80,8 @@ html,body,#wrapper,#container {min-height:100%; height:100%;}
 
 /* 로그인 :alert */
 .alertBox {position:relative; padding:10px 40px 10px 10px; margin-bottom:10px; border:1px solid; border-radius:.25rem; line-height:22px;}
-.alertBox .alertClose {position:absolute; top:0; right:5px; padding:0 10px; height:40px; text-indent:-9999px; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%;}
-.alertBox .alertClose:hover {background:url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.alertBox .alertClose {position:absolute; top:0; right:5px; padding:0 10px; height:40px; text-indent:-9999px; background:url('/image/btn_sltClose.png') no-repeat 50% 50%;}
+.alertBox .alertClose:hover {background:url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 .alert-success {color:#155724; background-color:#d4edda; border-color:#c3e6cb;}
 .alert-info {color:#0c5460; background-color:#d1ecf1; border-color:#bee5eb;}
 .alert-warning {color:#856404; background-color:#fff3cd; border-color:#ffeeba;}
@@ -122,8 +122,8 @@ header a, header button {color:#fff;}
 #lnb a {display:block; color:#a7b1c2;}
 #lnb a:hover {color:#fff;}
 #lnb a.on {color:#fff;}
-#lnb .dep2 {padding:14px 20px 14px 35px; background:url('../../image/icon_dep2.png') 10px 50% no-repeat, url('../../image/icon_depArr2.png') 222px 50% no-repeat; background-color:#233646; cursor:pointer;}
-#lnb .dep2.on {display:block; background:url('../../image/icon_dep2On.png') 10px 50% no-repeat, url('../../image/icon_depArr2On.png') 222px 50% no-repeat; background-color:#233646;}
+#lnb .dep2 {padding:14px 20px 14px 35px; background:url('/image/icon_dep2.png') 10px 50% no-repeat, url('/image/icon_depArr2.png') 222px 50% no-repeat; background-color:#233646; cursor:pointer;}
+#lnb .dep2.on {display:block; background:url('/image/icon_dep2On.png') 10px 50% no-repeat, url('/image/icon_depArr2On.png') 222px 50% no-repeat; background-color:#233646;}
 #lnb .dep3 {padding:5px 0 10px 10px; border-left:4px solid #8597eb; cursor:pointer;}
 #lnb .dep3 a {padding:10px; cursor:pointer;}
 #lnb .dep4 {padding:5px 0 10px 20px; cursor:pointer;}
@@ -153,7 +153,7 @@ header a, header button {color:#fff;}
 .panelStyle h2 {margin-right:10px; font-size:14px; font-weight:bold;}
 .panelStyle h3 {margin-right:10px; font-size:12px; font-weight:normal; line-height:25px;}
 .panelStyle h3 i {padding-right:5px}
-.panelStyle h4 {padding-left:23px; height:31px; line-height:31px; background:url('../../image/icon_h4.png') no-repeat 3px 50%; color:#666;}
+.panelStyle h4 {padding-left:23px; height:31px; line-height:31px; background:url('/image/icon_h4.png') no-repeat 3px 50%; color:#666;}
 .panelStyle .panelBar {display:table; width:100%; padding-bottom:10px;}
 .panelStyle .panelBar h4 {margin-bottom:0;}
 .panelStyle .panelBar > li {display:table-cell;}
@@ -261,7 +261,7 @@ input[type=radio] {position:absolute; top:50%; left:0; width:18px; height:18px;
 label.chkBox, label.rdoBtn {position:relative; display:inline-block; padding-left:26px; height:22px; line-height:22px; vertical-align:middle; cursor:pointer;}
 /* 체크박스 :전체선택 버튼--------------- */
 input[type=checkbox] {position:absolute; top:0; left:0; width:0; height:0;}
-input[type=button].chkBox {margin-left:-2px; padding-left:24px; height:22px; vertical-align:middle; background:url('../../image/icon_checkN.png') no-repeat 0 50%;}
+input[type=button].chkBox {margin-left:-2px; padding-left:24px; height:22px; vertical-align:middle; background:url('/image/icon_checkN.png') no-repeat 0 50%;}
 
 /* 체크박스--------------- */
 label.chkBox::before {position:absolute; top:2px; left:0; content:''; width:16px; height:16px; border:1px solid #dbdbdb; background:#fff;}
@@ -365,9 +365,11 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .btn-pink {color:#fff; background-color:#feada6; border:1px solid #feada6;}
 .btn-warning {color:#fff; background-color:#f8ac59; border:1px solid #f8ac59;}
 .btn-danger {color:#fff; background-color:#ed5565; border:1px solid #ed5565;}
-.btn-dark {color:#fff; background-color:#6c757d; border:1px solid #6c757d;}
+.btn-dark, .btn.active {color:#fff; background-color:#6c757d; border:1px solid #6c757d;}
 .btn.icn {line-height:28px; height:28px; padding:0 8px; background-color:#eee; border:1px solid #dbdbdb;}
 .btn.icn i {padding-top:6px; width:12px; vertical-align:top; font-size:14px; text-align:center;}
+.btnGroup{display:inline-block;}
+.btnGroup .btn + .btn{margin:0;}
 
 /* 페이징 --------------- */
 .tablePaging {position:relative; 	display:inline-block; vertical-align:middle;}
@@ -382,8 +384,8 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .mSelected li {float:left; margin:2px 5px 3px; line-height:24px; padding:0 7px; background:#dbedf9; -ms-user-select:none; -moz-user-select:-moz-none; -webkit-user-select:none; user-select:none;}
 .mSelected li.srchFld {margin:0; padding:0; background:none;}
 .mSelected .srchFld input {width:25px; margin:0; padding:0; border:none; outline:none;}
-.mSelected a {border:none !important; float:right; margin-left:3px; padding:0 3px; width:15px; line-height:22px; text-indent:-9999px; background:url('../../image/btn_sltClose.png') no-repeat 100% 50%;}
-.mSelected a:hover {background:url('../../image/btn_sltCloseOn.png') no-repeat 100% 50%;}
+.mSelected a {border:none !important; float:right; margin-left:3px; padding:0 3px; width:15px; line-height:22px; text-indent:-9999px; background:url('/image/btn_sltClose.png') no-repeat 100% 50%;}
+.mSelected a:hover {background:url('/image/btn_sltCloseOn.png') no-repeat 100% 50%;}
 .mSelecting {display:none; overflow-y:auto; overflow-x:hidden; position:absolute; top:100%; left:-1px; z-index:1; width:100%; max-height:156px; line-height:30px; border:1px solid #e5e6e7; background:#fff;}
 .mSelecting li {margin:0 10px; cursor:pointer;}
 
@@ -399,7 +401,7 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .lrStyle .uFile {margin-top:2px;}
 .uFileInput {position:absolute; top:0; width:100%; margin:0 !important; padding:0 !important; line-height:28px; border:none !important;}
 .uFileLabel {position:absolute; top:0; right:0; left:0; z-index:1; margin:0; padding:0 7px; width:cals(100% - 7px); line-height:28px; height:28px; background-color:#fff; border-radius:1px; overflow:hidden; white-space:nowrap;}
-.uFileLabel::after {position:absolute; top:0; right:0; bottom:0; width:30px; z-index:3; line-height:28px; content:" "; border-left:1px solid #dbdbdb; background:#eee url('../../image/icon_upload.png') no-repeat 50% 50%;}
+.uFileLabel::after {position:absolute; top:0; right:0; bottom:0; width:30px; z-index:3; line-height:28px; content:" "; border-left:1px solid #dbdbdb; background:#eee url('/image/icon_upload.png') no-repeat 50% 50%;}
 
 /* badge --------------- */
 .badge {float:right; margin-top:2px; padding:0 5px; min-width:9px; line-height:18px; color:#fff; font-size:12px; font-weight:600; border-radius:3px; text-align:center; text-shadow:1px 1px 1px rgba(0,0,0,0.4); letter-spacing:-0.5px;}
@@ -412,7 +414,7 @@ td[rowspan] {border-bottom:1px solid #eee;}
 .dep3 .badge {position:relative; top:-28px; right:20px;}
 
 /* badge-등급 ------------*/
-.badgeLevel{overflow:hidden;display:inline-block;margin:4px 0;padding:0;width:60px;height:60px;line-height:56px;font-size:30px;font-weight:bold;border-radius:100%;text-align:center;vertical-align:top;box-sizing:border-box;}
+.badgeLevel{overflow:hidden;display:inline-block;margin:5px 0 0;padding:0;width:50px;height:50px;line-height:46px;font-size:30px;font-weight:bold;border-radius:100%;text-align:center;vertical-align:top;box-sizing:border-box;}
 .badgeLevel.white{background-color:#fff;border:1px solid #333;color:#333;}
 .badgeLevel.dark1{background-color:#ccc;border:1px solid #ccc;color:#333;}
 .badgeLevel.dark2{background-color:#aaa;border:1px solid #aaa;color:#333;}
@@ -443,8 +445,8 @@ footer .f-right {float:right; padding-right:20px; line-height:38px;}
 .imgCard img {margin-right:15px;}
 .imgCard li:nth-of-type(2) {padding-top:20px; max-width:150px; line-height:24px}
 .imgCard p {font-size:12px;}
-.imgCard .cardClose {position:absolute; top:0; right:0; width:24px; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
-.imgCard .cardClose:hover {background:#f1f1f1 url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.imgCard .cardClose {position:absolute; top:0; right:0; width:24px; background:url('/image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
+.imgCard .cardClose:hover {background:#f1f1f1 url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 .verticalTop {vertical-align:top;}
 
 /* 조회용 이미지 카드 */
@@ -452,14 +454,14 @@ footer .f-right {float:right; padding-right:20px; line-height:38px;}
 .cardArea2 ul, .cardArea2 .box {vertical-align:top; position:relative; display:inline-block; margin:10px; border:1px solid #dbdbdb; max-width:300px;}
 .cardArea2 li {display:table-cell; line-height:26px; vertical-align:middle;}
 .cardArea2 li:nth-of-type(2) {padding:0 10px;}
-.cardArea2 .cardDel {position:absolute; top:0; right:0; background:url('../../image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
-.cardArea2 .cardDel:hover {background:#f1f1f1 url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.cardArea2 .cardDel {position:absolute; top:0; right:0; background:url('/image/btn_sltClose.png') no-repeat 50% 50%; text-indent:-9999px;}
+.cardArea2 .cardDel:hover {background:#f1f1f1 url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 
 /* 테이블 외부 안내문구 */
 .panelStyle > .notice {margin:0 0 15px ;}
 .panelContent > .notice {margin:15px 0;}
 .notice em {color:red;}
-.notice li, p.dot {padding-left:20px; background:url('../../image/dot_bk.png') no-repeat 5px 10px; line-height:24px;}
+.notice li, p.dot {padding-left:20px; background:url('/image/dot_bk.png') no-repeat 5px 10px; line-height:24px;}
 p.dot .btn {margin-left:10px !important;}
 p.dot em {color:red;}
 
@@ -483,14 +485,14 @@ p.dot em {color:red;}
 
 /* 유의사항 안내 */
 .infoBox {margin:0 20px 20px; padding:7px 10px; border-top:2px solid #dfe2e3; border-bottom:2px solid #dfe2e3; background:#fff}
-.infoBox p {padding-left:25px; line-height:20px; font-size:12px; background:url('../../image/dot_bk.png') no-repeat 10px 50%; background-size:3px auto;}
+.infoBox p {padding-left:25px; line-height:20px; font-size:12px; background:url('/image/dot_bk.png') no-repeat 10px 50%; background-size:3px auto;}
 
 /* 검색결과 안내문 */
 .srchNotice {padding-bottom:7px; font-weight:normal; font-size:14px;}
 .srchNotice em {color:red;}
 
 /* 필수입력항목 */
-.required {display:inline-block; position:relative; top:-3px; width:12px; height:7px; background:url('../../image/icon_required.png') no-repeat 0 50%;}
+.required {display:inline-block; position:relative; top:-3px; width:12px; height:7px; background:url('/image/icon_required.png') no-repeat 0 50%;}
 
 
 /* COLOR DESIGN -------------------------------------*/
@@ -646,8 +648,8 @@ hr {border:0; padding-bottom:10px;}/* 기본 여백 :10px */
 /*-- 회원추가 --------------*/
 .memAddWrap {line-height:26px; padding:3px 0;}
 .memAdd {margin-right:15px; padding:2px 27px 2px 0; position:relative; line-height:24px; height:24px; white-space:nowrap;}
-.memAdd button {position:absolute; top:3px; right:0; bottom:0; width:18px; height:18px; border:1px solid #dbdbdb; border-radius:3px; text-indent:-9999px; background:#eee url('../../image/btn_sltClose.png') no-repeat 50% 50%;}
-.memAdd button:hover {background:#eee url('../../image/btn_sltCloseOn.png') no-repeat 50% 50%;}
+.memAdd button {position:absolute; top:3px; right:0; bottom:0; width:18px; height:18px; border:1px solid #dbdbdb; border-radius:3px; text-indent:-9999px; background:#eee url('/image/btn_sltClose.png') no-repeat 50% 50%;}
+.memAdd button:hover {background:#eee url('/image/btn_sltCloseOn.png') no-repeat 50% 50%;}
 
 /*-- Date Picker --------------*/ /* 20200521 수정 */
 table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
@@ -657,8 +659,8 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 .ui-datepicker .ui-datepicker-today,
 .ui-datepicker .ui-state-highlight {background:#fff7cf !important;}
 .ui-datepicker .ui-state-active {border:1px solid red !important;}
-.ui-datepicker .ui-datepicker-prev {position:absolute; top:3px; left:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('../../image/icon_prev.png') no-repeat 50% 50%;}
-.ui-datepicker .ui-datepicker-next {position:absolute; top:3px; right:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('../../image/icon_next.png') no-repeat 50% 50%;}
+.ui-datepicker .ui-datepicker-prev {position:absolute; top:3px; left:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('/image/icon_prev.png') no-repeat 50% 50%;}
+.ui-datepicker .ui-datepicker-next {position:absolute; top:3px; right:3px; width:30px; line-height:30px; text-indent:-9999px; background:url('/image/icon_next.png') no-repeat 50% 50%;}
 .ui-datepicker .ui-datepicker-calendar {padding:5px; border:1px solid #ddd; border-top:none; text-align:center;}
 .ui-datepicker .ui-datepicker-calendar th{padding:5px 0}
 .ui-datepicker-week-end {text-align:center;}
@@ -758,13 +760,13 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 .sortableWrap .item .cont input {margin-left:5px; width:37px;}
 
 
-.ag-theme-balham.lh60 .ag-cell {line-height:60px !important; height:60px;}
-.ag-theme-balham.lh70 .ag-cell {line-height:70px !important; height:70px;}
-.ag-theme-balham.lh80 .ag-cell {line-height:80px !important; height:80px;}
-.ag-theme-balham.lh90 .ag-cell {line-height:90px !important; height:90px;}
-.ag-theme-balham.lh100 .ag-cell {line-height:100px !important; height:100px;}
-.ag-theme-balham.lh110 .ag-cell {line-height:110px !important; height:110px;}
-.ag-theme-balham.lh120 .ag-cell {line-height:120px !important; height:120px;}
+.ag-theme-balham.lh60 .ag-cell {line-height:56px !important; height:60px;}
+.ag-theme-balham.lh70 .ag-cell {line-height:66px !important; height:70px;}
+.ag-theme-balham.lh80 .ag-cell {line-height:76px !important; height:80px;}
+.ag-theme-balham.lh90 .ag-cell {line-height:86px !important; height:90px;}
+.ag-theme-balham.lh100 .ag-cell {line-height:96px !important; height:100px;}
+.ag-theme-balham.lh110 .ag-cell {line-height:106px !important; height:110px;}
+.ag-theme-balham.lh120 .ag-cell {line-height:116px !important; height:120px;}
 
 
 /* 테이블 상품명 클릭시 이미지 레이어 활성화 */
@@ -814,12 +816,12 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 /* 카테고리 Sort */
 .categoryOrder {margin-bottom:15px; background:#fcfcfc;}
 .categoryOrder li {clear:both; padding-left:15px; line-height:40px; cursor:move; border-top:1px dashed red; }
-.categoryOrder li button.on {background-image:url(../../image/icon_cate_minus.png);}
-/* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(../../image/line_cate.png)} */
+.categoryOrder li button.on {background-image:url(/image/icon_cate_minus.png);}
+/* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(/image/line_cate.png)} */
 .categoryOrder li:before{position:relative; content:''; width:1px; height:100%; background:#ddd;}
 .categoryOrder li ol{display:none}
 /* .categoryOrder ol:last-child li {background-image:none !important} */
-.categoryOrder button{position:relative; z-index:200; padding:0 15px 0; margin:0; line-height:40px; cursor:pointer; background-image:url(../../image/icon_cate_plus.png); background-repeat:no-repeat; background-position:0 0;}
+.categoryOrder button{position:relative; z-index:200; padding:0 15px 0; margin:0; line-height:40px; cursor:pointer; background-image:url(/image/icon_cate_plus.png); background-repeat:no-repeat; background-position:0 0;}
 
 /* 메인 공지팝업 */
 .noticeWrap{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);width:800px;background-color:#fff;}

+ 1 - 1
src/main/webapp/ux/js/admin.popup.js

@@ -778,7 +778,7 @@ var cfnOpenCompanyListPopup = function(callbackfn, multiGb, searchTxt, inputId)
  * @author : bin2107
  */
 var cfnOpenMorebetterSetPopup = function(mode ,tmtbSeq) {
-	var actionUrl = "/marketing/morebetterRegPopup/form?mode="+mode;
+	var actionUrl = "/marketing/morebetterPopup/form?mode="+mode;
 	if (typeof(tmtbSeq) != 'undefined') actionUrl += "&tmtbSeq=" + tmtbSeq;
 	uifnPopupClose('popupMorebetterReg');
 	cfnOpenModalPopup(actionUrl, 'popupMorebetterReg');

+ 6 - 4
src/main/webapp/ux/plugins/agGrid/ag-theme-balham.css

@@ -462,8 +462,8 @@
   border-width: 0; }
 .ag-theme-balham .ag-row:not(.ag-row-first) {
   border-width: 1px 0 0; }
-.ag-theme-balham .ag-row.ag-row-last {
-  border-bottom-width: 1px; }
+/* .ag-theme-balham .ag-row.ag-row-last {
+  border-bottom-width: 1px; } */
 .ag-theme-balham .ag-row-odd {
   background-color: #fcfdfe; }
 .ag-theme-balham .ag-row-even {
@@ -527,7 +527,7 @@
   line-height: 30px;
   padding-left: 12px;
   padding-right: 12px;
-  border: 1px solid transparent;
+ /* border: 1px solid transparent; */
   padding-left: 11px;
   padding-right: 11px;
 }
@@ -1875,7 +1875,9 @@
 .ag-theme-balham .ag-rtl .ag-column-drop-horizontal.ag-column-drop.ag-width-half:first-child {
   border-left: 0; }
 .ag-theme-balham .ag-row {
-  border-color: #d9dcde; }
+  border-color: #d9dcde; 
+  border-bottom: 1px solid #ddd;
+  }
 .ag-theme-balham .ag-row-selected {
   border-color: #b7e4ff; }
 .ag-theme-balham .ag-icon-row-drag {

+ 15 - 0
src/main/webapp/ux/plugins/gaga/gaga.agGrid.js

@@ -950,6 +950,21 @@ var gagaAgGrid = {
 			$('#load_AjaxSubmit').remove();
 		}
 	},
+	
+	/**
+	 * Hide the status bar of bottom
+	 * gagaAgGrid.createGrid() 함수 사용 후 호출한다.
+	 * <pre>
+	 *     gagaAgGrid.createGrid('gridList', gridOptions);
+	 *     gagaAgGrid.hideStatusBar('gridList');
+	 * </pre>
+	 * @param gridId - ag-Grid ID
+	 * @author gagamel
+	 * @since 2021. 1. 14
+	 */
+	hideStatusBar : function(gridId) {
+		$('#' + gridId + ' .ag-status-bar').hide();
+	},
 
 	/**
 	 * Fetch data using json format.

+ 68 - 3
src/main/webapp/ux/plugins/gaga/gaga.paging.js

@@ -71,8 +71,13 @@ var gagaPaging = {
 	 */
 	createPagination : function(pageable) {
 		// Generate pagination
-		$('#' + oPaginationId).html(pageable.generatedPagination);
-		
+		var html;
+		if (gagajf.isNull(pageable.generatedPagination)) {
+			html = gagaPaging.generatedPagination(pageable);
+		} else {
+			html = pageable.generatedPagination;
+		}
+		$('#' + oPaginationId).html(html);
 		// Bind event
 		gagaPaging.bind();
 	},
@@ -154,6 +159,66 @@ var gagaPaging = {
 				mcxDialog.alert('오류로 인해 처리되지 않았습니다.');
 			}
 		});
+	} ,
+	generatedPagination : function (pageable) {
+		let pageNo = pageable.pageNo;
+		let pageSize = pageable.pageSize;
+		let pageUnit = pageable.pageUnit;
+		let totalCount = pageable.totalCount;
+
+		let firstCount = (getPageGroup() - 1) * pageable.pageUnit + 1;
+		let loopCount = firstCount + pageUnit;
+		if (loopCount > getTotalPage()) {
+			loopCount = getTotalPage() + 1;
+		}
+
+		var pageTag = '';
+		if (!(firstCount == 1 && loopCount == 1)) {
+			if (pageNo == 1) {
+				pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n";
+			} else {
+				pageTag += "<a class=\"arrow\" href=\"#pageNo=1\"><i class=\"fa fa-angle-double-left\" alt=\"맨처음\"></i></a>\n";
+			}
+
+			if (getPageGroup() == 1) {
+				pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n";
+			} else {
+				pageTag += "<a class=\"arrow\" href=\"#pageNo="+ (getPageGroup()-1) * pageUnit + "\"><i class=\"fa fa-angle-left\" alt=\"이전페이지\"></i></a>\n"
+			}
+
+			for (let i = firstCount; i < loopCount; i++) {
+				if (pageNo == i) {
+					pageTag += "<a class=\"num on\" href=\"#\">"+ i + "</a>\n";
+				} else {
+					pageTag += "<a class=\"num\" href=\"#pageNo=" + i + "\">" + i +"</a>\n"
+				}
+			}
+
+			if (loopCount <= (getTotalPage() + 1)) {
+				if (pageNo == getTotalPage()) {
+					pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+					pageTag += "<a class=\"arrow\" href=\"#\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
+				} else {
+					pageTag += "<a class=\"arrow\" href=\"#pageNo=" + (getPageGroup() * pageUnit + 1) + "\"><i class=\"fa fa-angle-right\" alt=\"다음페이지\"></i></a>\n";
+					pageTag += "<a class=\"arrow\" href=\"#pageNo=" + getTotalPage() + "\"><i class=\"fa fa-angle-double-right\" alt=\"맨마지막\"></i></a>\n";
+				}
+			}
+		}
+
+		function getPageGroup() {
+			return parseInt(pageNo / pageUnit + 1 );
+		}
+
+		function getTotalPage() {
+			let totalPage = parseInt(totalCount / pageSize);
+			if (totalCount % pageSize > 0) {
+				totalPage++;
+			}
+			return totalPage;
+		}
+
+		return pageTag;
 	}
-	
+
 }
+