Procházet zdrojové kódy

Merge branch 'develop' into eskim

eskim před 5 roky
rodič
revize
020a85587b

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

@@ -1,12 +1,11 @@
 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 com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Coupon;
+
 /**
  * 쿠폰 DAO
  * @author xyzp1539
@@ -14,6 +13,7 @@ import java.util.Collection;
  */
 @ShopDs
 public interface TsaCouponDao {
+
 	/**
 	 * 쿠폰 리스트 조회
 	 * @param  Coupon
@@ -39,4 +39,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

+ 37 - 31
src/main/java/com/style24/admin/biz/service/TsaCouponService.java

@@ -34,9 +34,6 @@ public class TsaCouponService {
 	@Autowired
 	private TsaCommonService commonService;
 
-
-
-
 	/**
 	 * 쿠폰 저장
 	 * @param params
@@ -53,19 +50,18 @@ public class TsaCouponService {
 		params.setUpdNo(TsaSession.getInfo().getUserNo());
 
 		// 자동생성이면 시퀀스 가져오기
-		if(params.getCpnId() == null || params.getCpnId().equals("")) {
+		if (params.getCpnId() == null || params.getCpnId().equals("")) {
 			int sequence = commonService.getNextSequence("SEQ_COUPON");
-			cpnId = "CPN"+sequence;
+			cpnId = "CPN" + sequence;
 		} else {
 			cpnId = params.getCpnId();
 		}
 
-		log.info(">>>> CPNID : {}" , cpnId );
+		log.info(">>>> CPNID : {}", cpnId);
 		params.setCpnId(cpnId);
 
 		couponDao.couponInsert(params);
 
-
 		//checkCpnValidation(params);
 
 	}
@@ -81,27 +77,27 @@ public class TsaCouponService {
 		ObjectMapper mapper = new ObjectMapper();
 
 		try {
-			if(params.getSupplyCompList() != null) {
+			if (params.getSupplyCompList() != null) {
 				cpnSupplyCompList = mapper.readValue(params.getSupplyCompList(), new TypeReference<Collection<Coupon>>() {
 				});
 			}
-			if(params.getBrandList() != null) {
+			if (params.getBrandList() != null) {
 				cpnBrandList = mapper.readValue(params.getBrandList(), new TypeReference<Collection<Coupon>>() {
 				});
 			}
-			if(params.getApplyGoodsList() != null) {
+			if (params.getApplyGoodsList() != null) {
 				cpnApplyGoodsList = mapper.readValue(params.getApplyGoodsList(), new TypeReference<Collection<Coupon>>() {
 				});
 			}
-			if(params.getCateList() != null) {
+			if (params.getCateList() != null) {
 				cpnCateList = mapper.readValue(params.getCateList(), new TypeReference<Collection<Coupon>>() {
 				});
 			}
-			if(params.getBurdenList() != null) {
+			if (params.getBurdenList() != null) {
 				cpnBurdenList = mapper.readValue(params.getBurdenList(), new TypeReference<Collection<Coupon>>() {
 				});
 			}
-			if(params.getCateList() != null) {
+			if (params.getCateList() != null) {
 				cpnExcepGoodsList = mapper.readValue(params.getExceptGoodsList(), new TypeReference<Collection<Coupon>>() {
 				});
 			}
@@ -109,7 +105,6 @@ public class TsaCouponService {
 			e.printStackTrace();
 		}
 
-
 		return params;
 	}
 
@@ -144,25 +139,25 @@ public class TsaCouponService {
 	public void checkCpnValidation(Coupon params) {
 		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		// 할인율이면  100% 초과 체크하기
-		if(params.getDcWay() != null && params.getDcWay().equals("G240_11")) {
-			if(params.getDcAval() > 100) {
+		if (params.getDcWay() != null && params.getDcWay().equals("G240_11")) {
+			if (params.getDcAval() > 100) {
 				throw new IllegalStateException("모바일 앱 할인율은 100을 초과할수 없습니다.");
-			} else if(params.getDcPval() > 100) {
+			} else if (params.getDcPval() > 100) {
 				throw new IllegalStateException("PC할인율은 100을 초과할수 없습니다.");
-			} else if(params.getDcMval() > 100) {
+			} else if (params.getDcMval() > 100) {
 				throw new IllegalStateException("모바일 웹 100을 초과할수 없습니다.");
 			}
 		}
 
 		// 기간/일수구분이 일수인 경우 날짜 체크
-		if(params.getPdGb() != null && params.getPdGb().equals("D")) {
+		if (params.getPdGb() != null && params.getPdGb().equals("D")) {
 			try {
 				Date date1 = format.parse(params.getAvailStdt());
 				Date date2 = format.parse(params.getAvailEddt());
 
-				log.info("checkCpnValidation params.getAvailEddt() :  {}" , params.getAvailEddt());
-				log.info("checkCpnValidation params.getAvailStdt :  {}" , params.getAvailStdt());
-				if(date2.before(date1)) {
+				log.info("checkCpnValidation params.getAvailEddt() :  {}", params.getAvailEddt());
+				log.info("checkCpnValidation params.getAvailStdt :  {}", params.getAvailStdt());
+				if (date2.before(date1)) {
 					throw new IllegalStateException("유효기간 종료날짜가 시작날짜보다 작습니다.");
 				}
 			} catch (ParseException exception) {
@@ -170,14 +165,14 @@ public class TsaCouponService {
 		}
 
 		// 직접다운로드인 경우 기간 체크
-		if(params.getDnGb() != null && params.getDnGb().equals("G058_20")) {
+		if (params.getDnGb() != null && params.getDnGb().equals("G058_20")) {
 			try {
 				Date date1 = format.parse(params.getDownStdt());
 				Date date2 = format.parse(params.getDownEddt());
 
-				log.info("checkCpnValidation params.getDownStdt() :  {}" , params.getDownStdt());
-				log.info("checkCpnValidation params.getDownEddt :  {}" , params.getDownEddt());
-				if(date2.before(date1)) {
+				log.info("checkCpnValidation params.getDownStdt() :  {}", params.getDownStdt());
+				log.info("checkCpnValidation params.getDownEddt :  {}", params.getDownEddt());
+				if (date2.before(date1)) {
 					throw new IllegalStateException("다운로드 종료날짜가 시작날짜보다 작습니다.");
 				}
 			} catch (ParseException exception) {
@@ -185,14 +180,14 @@ public class TsaCouponService {
 		}
 
 		// 첫구매 적용하는 경우 날짜 체크
-		if(params.getFirstYn() != null && params.getFirstYn().equals("Y")) {
+		if (params.getFirstYn() != null && params.getFirstYn().equals("Y")) {
 			try {
 				Date date1 = format.parse(params.getBuyStdt());
 				Date date2 = format.parse(params.getBuyEddt());
 
-				log.info("checkCpnValidation params.getBuyStdt() :  {}" , params.getBuyStdt());
-				log.info("checkCpnValidation params.getBuyEddt :  {}" , params.getBuyEddt());
-				if(date2.before(date1)) {
+				log.info("checkCpnValidation params.getBuyStdt() :  {}", params.getBuyStdt());
+				log.info("checkCpnValidation params.getBuyEddt :  {}", params.getBuyEddt());
+				if (date2.before(date1)) {
 					throw new IllegalStateException("첫구매 종료날짜가 시작날짜보다 작습니다.");
 				}
 			} catch (ParseException exception) {
@@ -200,10 +195,21 @@ public class TsaCouponService {
 		}
 
 		// 신규회원여부 적용하는 경우 날짜 체크
-		if(params.getCustJoinYn() != null && params.getCustJoinYn().equals("Y")) {
+		if (params.getCustJoinYn() != null && params.getCustJoinYn().equals("Y")) {
 
 		}
 
 	}
 
+	/**
+	 * 쿠폰조회 목록
+	 * @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

+ 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);
+	}
+
+
 }

+ 86 - 53
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1,26 +1,46 @@
 package com.style24.admin.biz.web;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Controller;
+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 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.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.TsaPageRequest;
-import com.style24.persistence.domain.*;
+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 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.servlet.ModelAndView;
 
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+
 /**
  * 마케팅 Controller
  * @author xodud1202
@@ -81,7 +101,7 @@ 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()));
@@ -93,7 +113,6 @@ public class TsaMarketingController extends TsaBaseController {
 		return result;
 	}
 
-
 	/**
 	 * 사은품 프로모션 등록 팝업창
 	 * @param param
@@ -114,7 +133,6 @@ public class TsaMarketingController extends TsaBaseController {
 		return mav;
 	}
 
-
 	/* // xodud1202 진행 */
 
 	/* JSM 진행 */
@@ -124,15 +142,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"));
 
@@ -150,8 +168,8 @@ 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);
@@ -160,9 +178,9 @@ public class TsaMarketingController extends TsaBaseController {
 		param.setPageable(new TsaPageRequest(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;
 	}
@@ -181,10 +199,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);
@@ -195,50 +213,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;
@@ -254,7 +272,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);
 
@@ -286,7 +304,7 @@ 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()));
@@ -308,7 +326,7 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@ResponseBody
 	@GetMapping("/morebetterRegPopup/form")
-	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq,MoreBetter tmtb) {
+	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq, MoreBetter tmtb) {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태 : 등록일때는 '대기'
@@ -322,7 +340,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));
 
 		// 제외 상품구분 목록
@@ -333,21 +351,21 @@ public class TsaMarketingController extends TsaBaseController {
 
 		//tmtb sq 자동생성
 		Integer tmtbSq;
-		if("N".equals(mode)){
-			tmtbSq =  commonService.getNextSequence("SEQ_TMTB");
+		if ("N".equals(mode)) {
+			tmtbSq = commonService.getNextSequence("SEQ_TMTB");
 			tmtb.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());
@@ -456,6 +474,7 @@ public class TsaMarketingController extends TsaBaseController {
 
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
+
 	/**
 	 * 다다익선 공급업체 삭제
 	 *
@@ -546,4 +565,18 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 	/* // CSB 진행 */
+
+	/**
+	 * 쿠폰조회 목록
+	 * @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);
+	}
+
 }

+ 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;
+
+}

+ 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 '%'||#{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>

+ 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 = {"F":"여성", "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>