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

Merge remote-tracking branch 'origin/order' into jsh77b

jsh77b 5 лет назад
Родитель
Сommit
7f9c8b3dc9
28 измененных файлов с 1147 добавлено и 231 удалено
  1. 0 9
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  2. 16 0
      src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java
  3. 22 0
      src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java
  4. 48 22
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  5. 19 0
      src/main/java/com/style24/admin/biz/service/TsaDisplayService.java
  6. 64 13
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  7. 14 0
      src/main/java/com/style24/admin/biz/service/TsaRendererService.java
  8. 34 0
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  9. 21 0
      src/main/java/com/style24/admin/biz/web/TsaDisplayController.java
  10. 58 7
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  11. 31 6
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  12. 6 1
      src/main/java/com/style24/persistence/domain/CategoryGoods.java
  13. 12 0
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  14. 11 1
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  15. 29 0
      src/main/java/com/style24/persistence/domain/SizeInfo.java
  16. 7 4
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  17. 20 87
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  18. 53 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  19. 83 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  20. 10 4
      src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  21. 14 7
      src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml
  22. 3 3
      src/main/webapp/WEB-INF/views/business/BrandForm.html
  23. 60 52
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  24. 122 0
      src/main/webapp/WEB-INF/views/customer/CustomerSecedePopupForm.html
  25. 72 9
      src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html
  26. 5 3
      src/main/webapp/WEB-INF/views/goods/GoodsListForm.html
  27. 285 0
      src/main/webapp/WEB-INF/views/goods/GoodsSizeInfoForm.html
  28. 28 3
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html

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

@@ -37,15 +37,6 @@ public interface TsaCustomerDao {
 	 */
 	Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch);
 
-	/**
-	 * 회원 정보
-	 * @param custNo - 고객번호
-	 * @return Customer
-	 * @author jsshin
-	 * @since 2021. 01. 18
-	 */
-	Customer getCustomerInfo(Integer custNo);
-
 	/**
 	 * 회원정보 수정
 	 * @param customer - 고객정보

+ 16 - 0
src/main/java/com/style24/admin/biz/dao/TsaDisplayDao.java

@@ -176,4 +176,20 @@ public interface TsaDisplayDao {
 	 * @since 2021. 1. 18
 	 */
 	void deleteGoodsCategory(GoodsCategory goodsCategory);
+
+	/**
+	 * 카테고리별상품 건수 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 27
+	 */
+	int getCategoryGoodsListCount(CategoryGoods categoryGoods);
+
+	/**
+	 * 카테고리별상품 리스트 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 27
+	 */
+	Collection<CategoryGoods> getCategoryGoodsList(CategoryGoods categoryGoods);
 }

+ 22 - 0
src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java

@@ -28,6 +28,7 @@ import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.NoticeGoods;
 import com.style24.persistence.domain.Option;
 import com.style24.persistence.domain.ReinboundInform;
+import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.Video;
 import com.style24.persistence.domain.WmsColorMapping;
 import com.style24.persistence.domain.WmsGoods;
@@ -1157,4 +1158,25 @@ public interface TsaGoodsDao {
 	 * @since 2021. 01. 25
 	 */
 	Collection<GoodsMass> getGoodsRegLogList(GoodsSearch goodsSearch);
+
+	/**
+	 * 사이즈 정보 목록
+	 *
+	 * @param sizeInfo
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 26
+	 */
+	Collection<SizeInfo> getSizeInfoList(SizeInfo sizeInfo);
+
+	/**
+	 * 사이즈 정보 저장
+	 *
+	 * @param sizeInfo
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 27
+	 */
+	void saveSizeInfo(SizeInfo sizeInfo);
+
 }

+ 48 - 22
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -1,9 +1,10 @@
 package com.style24.admin.biz.service;
 
+import com.gagaframework.web.parameter.GagaMap;
 import com.style24.admin.biz.dao.TsaCustomerDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.core.biz.dao.TscCustomerDao;
 import com.style24.core.biz.service.TscCustomerService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.persistence.domain.Counsel;
 import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CustContactHst;
@@ -17,6 +18,7 @@ import com.style24.persistence.domain.Point;
 import com.style24.persistence.domain.Review;
 
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -44,7 +46,7 @@ public class TsaCustomerService {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 12
+	 * @since 2021. 1. 12
 	 */
 	public Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch) {
 		return customerDao.getCustomerActiveList(customerSearch);
@@ -55,25 +57,38 @@ public class TsaCustomerService {
 	 * @param custNo - 고객번호
 	 * @return Customer
 	 * @author jsshin
-	 * @since 2020. 01. 18
+	 * @since 2021. 1. 18
 	 */
 	public Customer getCustomerInfo(Integer custNo) {
-		return customerDao.getCustomerInfo(custNo);
+		Customer customer = new Customer();
+		customer.setCustNo(custNo);
+		customer.setCustStat(TscConstants.CustStat.ACTIVE.value());
+		return coreCustomerService.getCustomerInfo(customer);
 	}
 
 	/**
 	 * 회원정보 수정
 	 * @param customer - 고객정보
 	 * @author jsshin
-	 * @since 2020. 01. 20
+	 * @since 2021. 1. 20
 	 */
 	@Transactional("shopTxnManager")
 	public void saveCustomerInfo(Customer customer) {
 		Integer userNo = TsaSession.getInfo().getUserNo();
 		customer.setRegNo(userNo);
 		customer.setUpdNo(userNo);
+
 		// 고객 이력 생성
 		coreCustomerService.createCustomerHistory(customer);
+
+		// 마케팅수신동의 이력 화면단에서 수신 변경이 없으면 ''처리
+		if (StringUtils.isNotBlank(customer.getSmsAgreeYn())
+				|| StringUtils.isNotBlank(customer.getSmsAgreeYn())
+				|| StringUtils.isNotBlank(customer.getAppAgreeYn()) ){
+
+			coreCustomerService.createCustomerMarketHst(customer);
+		}
+
 		// 정보 수정
 		customerDao.updateCustomerInfo(customer);
 	}
@@ -82,7 +97,7 @@ public class TsaCustomerService {
 	 * 회원 비밀번호 수정
 	 * @param customer - 고객정보
 	 * @author jsshin
-	 * @since 2020. 01. 20
+	 * @since 2021. 1. 20
 	 */
 	@Transactional("shopTxnManager")
 	public void updateCustomerPassword(Customer customer) {
@@ -93,7 +108,7 @@ public class TsaCustomerService {
 	 * 회원 휴대전화번호 수정
 	 * @param customer - 고객정보
 	 * @author jsshin
-	 * @since 2020. 01. 25
+	 * @since 2021. 1. 25
 	 */
 	@Transactional("shopTxnManager")
 	public void updateCustomerCellphnno(Customer customer) {
@@ -104,12 +119,24 @@ public class TsaCustomerService {
 		customerDao.updateCustomerCellPhnno(customer);
 	}
 
+	/**
+	 * 회원 탈퇴처리
+	 * @param customer - 고객정보
+	 * @author jsshin
+	 * @since 2021. 1. 26
+	 */
+	@Transactional("shopTxnManager")
+	public GagaMap saveCustomerSecede(Customer customer) {
+		customer.setCustStat(TscConstants.CustStat.SECEDE.value());
+		return coreCustomerService.saveCustomerSecede(customer);
+	}
+
 	/**
 	 * 회원 주문내역
 	 * @param custNo - 고객번호
 	 * @return Collection<Order>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Order> getCustomerOrderList(Integer custNo) {
 		return customerDao.getCustomerOrderList(custNo);
@@ -121,7 +148,7 @@ public class TsaCustomerService {
 	 * @param custNo - 고객번호
 	 * @return Collection<Delivery>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Delivery> getCustomerDeliveryAddrList(Integer custNo) {
 		return customerDao.getCustomerDeliveryAddrList(custNo);
@@ -151,7 +178,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Coupon>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Coupon> getCustomerCouponList(Integer custNo) {
 		return customerDao.getCustomerCouponList(custNo);
@@ -163,7 +190,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Point
 	 * @author jsshin
-	 * @since 2021. 01. 25
+	 * @since 2021. 1. 25
 	 */
 	public Point getCustomerPoint(Integer custNo){
 		return customerDao.getCustomerPoint(custNo);
@@ -175,7 +202,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Coupon>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Point> getCustomerPointList(Integer custNo) {
 		return customerDao.getCustomerPointList(custNo);
@@ -187,7 +214,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<GiftCard>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<GiftCard> getCustomerGiftCardList(Integer custNo) {
 		return customerDao.getCustomerGiftCardList(custNo);
@@ -199,7 +226,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Review>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Review> getCustomerReviewList(Integer custNo) {
 		return customerDao.getCustomerReviewList(custNo);
@@ -211,7 +238,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Counsel>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Counsel> getCustomerCounselList(Integer custNo) {
 		return customerDao.getCustomerCounselList(custNo);
@@ -223,7 +250,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Counsel>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<Counsel> getCustomerGoodsQnaList(Integer custNo) {
 		return customerDao.getCustomerGoodsQnaList(custNo);
@@ -235,7 +262,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Counsel>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<CustGrade> getCustomerChangeGradeList(Integer custNo) {
 		return customerDao.getCustomerChangeGradeList(custNo);
@@ -247,7 +274,7 @@ public class TsaCustomerService {
 	 * @param custNo -고객일련번호
 	 * @return Collection<Counsel>
 	 * @author jsshin
-	 * @since 2021. 01. 21
+	 * @since 2021. 1. 21
 	 */
 	public Collection<CustContactHst> getCustomerContactList(Integer custNo) {
 		return customerDao.getCustomerContactList(custNo);
@@ -259,7 +286,7 @@ public class TsaCustomerService {
 	 * @param custContactHst -고객정보
 	 * @return void
 	 * @author jsshin
-	 * @since 2021. 01. 25
+	 * @since 2021. 1. 25
 	 */
 	@Transactional("shopTxnManager")
 	public void createCustomerContactHistory(CustContactHst custContactHst) {
@@ -276,7 +303,7 @@ public class TsaCustomerService {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 14
+	 * @since 2020. 0. 14
 	 */
 	public Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch) {
 		return customerDao.getCustomerSecedeList(customerSearch);
@@ -287,12 +314,11 @@ public class TsaCustomerService {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 14
+	 * @since 2020. 1. 14
 	 */
 	public Collection<Customer> getCustomerDormantList(CustomerSearch customerSearch) {
 		return customerDao.getCustomerDormantList(customerSearch);
 	}
 
 
-
 }

+ 19 - 0
src/main/java/com/style24/admin/biz/service/TsaDisplayService.java

@@ -270,4 +270,23 @@ public class TsaDisplayService {
 		displayDao.deleteGoodsCategory(goodsCategory);
 	}
 
+	/**
+	 * 카테고리별상품 건수 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 27
+	 */
+	public int getCategoryGoodsListCount(CategoryGoods categoryGoods) {
+		return displayDao.getCategoryGoodsListCount(categoryGoods);
+	}
+
+	/**
+	 * 카테고리별상품 리스트 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 27
+	 */
+	public Collection<CategoryGoods> getCategoryGoodsList(CategoryGoods categoryGoods) {
+		return displayDao.getCategoryGoodsList(categoryGoods);
+	}
 }

+ 64 - 13
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -50,6 +50,7 @@ import com.style24.persistence.domain.NoticeGoods;
 import com.style24.persistence.domain.Option;
 import com.style24.persistence.domain.ReinboundInform;
 import com.style24.persistence.domain.SearchData;
+import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.SupplyCompany;
 import com.style24.persistence.domain.Video;
 import com.style24.persistence.domain.WmsColorMapping;
@@ -944,7 +945,6 @@ public class TsaGoodsService {
 				}
 			}
 
-			log.info("newRepGoodsCd = {}, newRepGoodsPrice = {}, goods.getRepGoodsCd = {}", newRepGoodsCd, newRepGoodsPrice, goods.getRepGoodsCd());
 			// 1순 : 대표상품 변경, 2순 : 판매가 변경
 			if (!newRepGoodsCd.equals(goods.getRepGoodsCd())) {
 				goods.setCurrBprice(goods.getCurrPriceOrg());
@@ -1231,10 +1231,10 @@ public class TsaGoodsService {
 		stock.setUpdNo(goods.getUpdNo());
 		stock.setRegNo(goods.getRegNo());
 		goodsDao.createStockHst(stock);
-		log.info("saveStock goods={}", goods);
+		//log.info("saveStock goods={}", goods);
 		for (String optCd : goods.getOptCd()) {
-			log.info("saveStock index={}", index);
-			log.info("saveStock optCd={}", optCd);
+			//log.info("saveStock index={}", index);
+			//log.info("saveStock optCd={}", optCd);
 			Option goodsStock = new Option();
 			goodsStock.setGoodsCd(goods.getCompsGoodsCd()[index]); // 구성상품 코드
 			goodsStock.setOptCd(optCd);
@@ -1896,7 +1896,7 @@ public class TsaGoodsService {
 				e.printStackTrace();
 				throw new IllegalStateException(message.getMessage("상품상세공지 저장 중 오류로 인해 저장되지 않았습니다."));
 			}
-			log.info("noticeGoodsList: {}", noticeGoodsList);
+			//log.info("noticeGoodsList: {}", noticeGoodsList);
 			for (NoticeGoods noticeGoods : noticeGoodsList) {
 				noticeGoods.setNoticeSq(notice.getNoticeSq());
 				noticeGoods.setRegNo(TsaSession.getInfo().getUserNo());
@@ -2369,12 +2369,12 @@ public class TsaGoodsService {
 
 		for (String goodsCd : goodsSearch.getConditionList()) {
 			try {
-				log.info("saveGoodsNaverLowestPrice  11 =  {}", GagaDateUtil.getTodayDateTime());
+				//log.info("saveGoodsNaverLowestPrice  11 =  {}", GagaDateUtil.getTodayDateTime());
 				TaskSleeep();
-				log.info("saveGoodsNaverLowestPrice  22 =  {}", GagaDateUtil.getTodayDateTime());
+				//log.info("saveGoodsNaverLowestPrice  22 =  {}", GagaDateUtil.getTodayDateTime());
 				NaverLowestPrice naverLowestPrice = naverLowestPriceApi.getLowestPrice(goodsCd);
 
-				log.info("[saveGoodsNaverLowestPrice] naverLowestPrice= {}", naverLowestPrice);
+				//log.info("[saveGoodsNaverLowestPrice] naverLowestPrice= {}", naverLowestPrice);
 				if (naverLowestPrice != null) {
 					GoodsNaverLowestPrice goodsNaverLowestPrice = new GoodsNaverLowestPrice();
 					goodsNaverLowestPrice.setReqYmd(GagaDateUtil.getToday());
@@ -2384,7 +2384,7 @@ public class TsaGoodsService {
 					goodsNaverLowestPrice.setLowestPrice(naverLowestPrice.getItems().iterator().next().getLprice());
 					goodsNaverLowestPrice.setRegNo(TsaSession.getInfo().getUserNo());
 					goodsNaverLowestPrice.setUpdNo(TsaSession.getInfo().getUserNo());
-					log.info("[saveGoodsNaverLowestPrice] goodsNaverLowestPrice= {}", goodsNaverLowestPrice);
+					//log.info("[saveGoodsNaverLowestPrice] goodsNaverLowestPrice= {}", goodsNaverLowestPrice);
 					goodsDao.saveGoodsNaverLowestPrice(goodsNaverLowestPrice);
 
 				}
@@ -2473,7 +2473,7 @@ public class TsaGoodsService {
 				e.printStackTrace();
 				throw new IllegalStateException(message.getMessage("광고 키워드 저장 중 오류로 인해 저장되지 않았습니다."));
 			}
-			log.info("adKeywordGoodsList: {}", adKeywordGoodsList);
+			//log.info("adKeywordGoodsList: {}", adKeywordGoodsList);
 
 			int idx = 0;
 			for (AdKeywordGoods adKeywordGoods : adKeywordGoodsList) {
@@ -2767,8 +2767,8 @@ public class TsaGoodsService {
 			return goods.getGoodsStat();
 		}
 
-		// 상품상세 (html, as-is/입점)
-		if (!UPDATE_NO_PATTERN.equals(goodsMass.getGoodsContent().trim())) {
+		// 상품상세 (html, as-is/입점) - 일반상품만 적용
+		if (!UPDATE_NO_PATTERN.equals(goodsMass.getGoodsContent().trim()) && "G056_N".equals(goodsOrigin.getGoodsType())) {
 			if (goodsMass.getGoodsContent().toLowerCase().indexOf("script") >= 0) {
 				goods.setGoodsRegMsg("상품상세 html script 선언 오류");
 				goods.setGoodsStat("10");
@@ -2808,7 +2808,7 @@ public class TsaGoodsService {
 		}
 
 		//상품 상세 변경여부 와 촬영업체가 아닌경우
-		if ("Y".equals(goods.getChkDescKeep()) && !"G001_E000".equals(TsaSession.getInfo().getRoleCd())) {
+		if ("Y".equals(goods.getChkDescKeep()) && !"G001_E000".equals(TsaSession.getInfo().getRoleCd()) && "G056_N".equals(goodsOrigin.getGoodsType())) {
 			GoodsDesc goodsDesc = new GoodsDesc();
 			goodsDesc.setGoodsCd(goods.getGoodsCd());
 			goodsDesc.setRegNo(goods.getRegNo());
@@ -3515,4 +3515,55 @@ public class TsaGoodsService {
 		}
 		return goodsDao.getGoodsRegLogList(goodsSearch);
 	}
+
+	/**
+	 * 사이즈 정보 목록
+	 *
+	 * @param sizeInfo
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 26
+	 */
+	public Collection<SizeInfo> getSizeInfoList(SizeInfo sizeInfo) {
+		return goodsDao.getSizeInfoList(sizeInfo);
+	}
+
+	/**
+	 * 사이즈 정보 저장
+	 *
+	 * @param sizeInfo
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 27
+	 */
+	public void saveSizeInfo(SizeInfo sizeInfo) {
+
+		String sizeCate1Cd = "";
+		String sizeCate2Cd = "";
+		if ("1".equals(sizeInfo.getSizeGb()) ){
+			sizeCate1Cd = "00";
+			if ("Y".equals(sizeInfo.getSelfYn())){
+				sizeCate1Cd = sizeInfo.getBrandCd();
+			}
+			sizeInfo.setSizeCate1Cd(sizeCate1Cd);
+			if (StringUtils.isBlank(sizeInfo.getSizeCate2Cd())) {
+				sizeCate2Cd = commonService.getNextSequence("SEQ_CATE").toString();
+				sizeInfo.setSizeCate2Cd(sizeCate2Cd);
+			}
+
+		}else {
+
+			if (StringUtils.isBlank(sizeInfo.getSizeCate1Cd())) {
+				sizeCate1Cd = commonService.getNextSequence("SEQ_CATE").toString();
+				sizeInfo.setSizeCate1Cd(sizeCate1Cd);
+				sizeInfo.setSizeCate2Cd(sizeCate1Cd);
+			}
+
+		}
+
+		sizeInfo.setRegNo(TsaSession.getInfo().getUserNo());
+		sizeInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+		goodsDao.saveSizeInfo(sizeInfo);
+	}
+
 }

+ 14 - 0
src/main/java/com/style24/admin/biz/service/TsaRendererService.java

@@ -271,6 +271,20 @@ public class TsaRendererService {
 //	//		return rendererDao.getBrandList(brand);
 //	//	}
 //	//
+
+
+	/**
+	 * 브랜드 목록
+	 * @param
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 26
+	 */
+	public Collection<CommonCode> getBrandList(Brand brand) {
+		return rendererDao.getBrandList(brand);
+	}
+
+
 	/**
 	 * 공급업체 브랜드 목록
 	 * @param supplyCompCd - 공급업체코드

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

@@ -401,6 +401,7 @@ public class TsaCustomerController extends TsaBaseController {
 	@ResponseBody
 	public Customer getCustomerInfo(@PathVariable Integer custNo) {
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
+
 		return customerService.getCustomerInfo(custNo);
 	}
 
@@ -433,6 +434,7 @@ public class TsaCustomerController extends TsaBaseController {
 		String tempPasswd = systemService.getTemporaryPassword(10);
 		log.info("tempPasswd  ====> {}", tempPasswd);
 
+		customer.setTempPasswdYn("Y"); // 임시비밀번호여부
 		customer.setPasswd(tempPasswd);
 		customer.setEncodedPasswd(passwordEncoder.encodeSha256(tempPasswd));
 		customer.setRegNo(TsaSession.getInfo().getRegNo());
@@ -646,6 +648,38 @@ public class TsaCustomerController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0005"));
 	}
 
+	/**
+	 * 회원탈퇴처리
+	 *
+	 * @param elementCustNo - 고객일련번호
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/secede/popup/form")
+	public ModelAndView emailPopupForm( @RequestParam(value = "elementCustNo") String elementCustNo) {
+
+		ModelAndView mav = new ModelAndView();
+
+		// 고객일련번호
+		mav.addObject("elementCustNo", elementCustNo);
+
+		// 탈퇴 구분
+		mav.addObject("secedeRsnList", rendererService.getCommonCodeList("G102", "Y"));
+
+		mav.setViewName("customer/CustomerSecedePopupForm");
+
+		return mav;
+	}
+	@PostMapping("/secede/save")
+	@ResponseBody
+	public GagaMap saveCustomerSecede(@RequestBody Customer customer) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		customer.setRegNo(userNo);
+		customer.setUpdNo(userNo);
+		return customerService.saveCustomerSecede(customer);
+	}
+
 	/**
 	 * 회원상세-주문내역목록
 	 *

+ 21 - 0
src/main/java/com/style24/admin/biz/web/TsaDisplayController.java

@@ -321,4 +321,25 @@ public class TsaDisplayController extends TsaBaseController {
 
 		return mav;
 	}
+
+	/**
+	 * 카테고리별상품 조회
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 27
+	 */
+	@PostMapping("/category/goods/list")
+	@ResponseBody
+	public GagaMap getCategoryGoodsList(@RequestBody CategoryGoods categoryGoods) {
+		GagaMap result = new GagaMap();
+
+		categoryGoods.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
+		categoryGoods.setPageable(new TscPageRequest(categoryGoods.getPageNo() - 1, categoryGoods.getPageSize()));
+		categoryGoods.getPageable().setTotalCount(displayService.getCategoryGoodsListCount(categoryGoods));
+
+		result.set("pageing", categoryGoods);
+		result.set("categoryGoodsList", displayService.getCategoryGoodsList(categoryGoods));
+
+		return result;
+	}
 }

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

@@ -34,6 +34,7 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.AdKeyword;
 import com.style24.persistence.domain.AdKeywordGoods;
+import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.FreeGoods;
 import com.style24.persistence.domain.Goods;
@@ -55,6 +56,7 @@ import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.NoticeGoods;
 import com.style24.persistence.domain.Option;
 import com.style24.persistence.domain.ReinboundInform;
+import com.style24.persistence.domain.SizeInfo;
 import com.style24.persistence.domain.User;
 import com.style24.persistence.domain.Video;
 import com.style24.persistence.domain.WmsColorMapping;
@@ -507,7 +509,7 @@ public class TsaGoodsController extends TsaBaseController {
 				goodsSearch.setSearchGb("MASTER");
 			}
 		}
-		log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
+		//log.info("[getGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
@@ -1057,17 +1059,17 @@ public class TsaGoodsController extends TsaBaseController {
 
 				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, newFilename)));
 				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, uniqueFile.getName()));
-				log.info("newFile.getPath(): {}", newFile.getPath());
+				//log.info("newFile.getPath(): {}", newFile.getPath());
 
 				// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
 				errorFileList.add(newFile);
 
 				File oldFile = new File(GagaFileUtil.getConcatenationPath(dextUploadPath, goodsImg.getSysImgNm()));
-				log.info("oldFile.getPath(): {}", oldFile.getPath());
+				//log.info("oldFile.getPath(): {}", oldFile.getPath());
 
 				File path = new File(goodsUploadPath);
 				if (!path.exists()) {
-					log.info("mkdir ={}", goodsUploadPath);
+					//log.info("mkdir ={}", goodsUploadPath);
 					path.mkdir();
 				}
 
@@ -1090,7 +1092,7 @@ public class TsaGoodsController extends TsaBaseController {
 		// 2.dx5에서 삭제한 파일 실제 삭제 처리
 		for (GoodsImg goodsImg : goodsImgList) {
 			if (goodsImg.getMode().equals("D")) {
-				log.info("Original file to delete: {}", GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
+				//log.info("Original file to delete: {}", GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
 
 				// 상품이미지 삭제
 				GagaFileUtil.deleteFile(GagaFileUtil.getConcatenationPath(goodsTargetPath, goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
@@ -2085,7 +2087,7 @@ public class TsaGoodsController extends TsaBaseController {
 				goodsSearch.setSearchGb("MASTER");
 			}
 		}
-		log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
+		//log.info("[getPopupGoodsList] goodsSearch=>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
@@ -2497,7 +2499,7 @@ public class TsaGoodsController extends TsaBaseController {
 		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
 			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
 		}
-		log.info("[getFreeGoodsList] goodsSearch={}", goodsSearch);
+
 		return goodsService.getFreeGoodsList(goodsSearch);
 	}
 
@@ -2603,4 +2605,53 @@ public class TsaGoodsController extends TsaBaseController {
 		return goodsService.getGoodsRegLogList(goodsSearch);
 	}
 
+	/**
+	 * 사이즈 정보관리
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 26
+	 */
+	@GetMapping("/size/info/form")
+	@ResponseBody
+	public ModelAndView sizeInfoForm() {
+
+		ModelAndView mav = new ModelAndView();
+
+		//자사브랜드
+		Brand brand = new Brand();
+		brand.setSelfYn("Y");
+		mav.addObject("selfBrandList", rendererService.getBrandList(brand));
+
+		mav.setViewName("goods/GoodsSizeInfoForm");
+		return mav;
+	}
+
+	/**
+	 * 사이즈 정보 목록
+	 *
+	 * @param goodsSearch
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 26
+	 */
+	@PostMapping("/size/info/list")
+	@ResponseBody
+	public Collection<SizeInfo> getSizeInfoList(@RequestBody SizeInfo sizeInfo) {
+		return goodsService.getSizeInfoList(sizeInfo);
+	}
+
+	/**
+	 * 사이즈 정보 저장
+	 *
+	 * @param sizeInfo
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 27
+	 */
+	@PostMapping("/size/info/save")
+	@ResponseBody
+	public GagaResponse saveSizeInfo(@RequestBody SizeInfo sizeInfo) {
+		goodsService.saveSizeInfo(sizeInfo);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 }

+ 31 - 6
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -661,15 +661,40 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@PostMapping("/morebetter/save")
 	@ResponseBody
-	public GagaResponse saveMorebetterDetail(@RequestBody MoreBetter moreBetter){
-		try {
-			morebetterService.saveMoreBetterDetail(moreBetter);
+	public GagaMap saveMorebetterDetail(@RequestBody MoreBetter moreBetter){
+		String result = "";
+		GagaMap map = new GagaMap();
+
+		try{
+			MoreBetterGoods moreBetterGoods = new MoreBetterGoods();
+			moreBetterGoods.setMultiSupplyCompCd(moreBetter.getMultiSupplyCompCd());
+			moreBetterGoods.setMultiBrand(moreBetter.getMultiBrand());
+			moreBetterGoods.setMultiApplyGoods(moreBetter.getMultiApplyGoods());
+			moreBetterGoods.setMultiExceptGoods(moreBetter.getMultiExceptGoods());
+
+			// TMTB_GOODS_TEMP TABLE TRUNCATE -> 다른 다다에서 사용중인 상품 조회 -> INSERT
+			morebetterService.createMorebetterGoodsTemp(moreBetterGoods);
+			// 다른 다다에서 사용중인 상품 조회
+			Collection<MoreBetterGoods> duplicateGoodsList = morebetterService.getMorebetterDuplicateList(moreBetterGoods);
+
+			// SELECT -> 지금 내가 선택한 업체&브랜드 + 적용상품에 해당하는 상품 조회 MINUS TMTB_GOODS_TEMP 상품
+			// 조회 건수 있으면 -> 해당 상품코드 엑셀로 던져주기
+			if(duplicateGoodsList.size() > 0){
+				map.set("duplicateYn","Y");
+				//map.set("message", result);
+				map.set("duplicateGoodsList",duplicateGoodsList);
+			}else{
+				// 조회 건수 없으면 -> 저장으로 넘어감
+				morebetterService.saveMoreBetterDetail(moreBetter);
+				map.set("duplicateYn","N");
+				map.set("message", message.getMessage("SUCC_0001"));
+			}
 		} catch(Exception e) {
 			e.printStackTrace();
-			return super.error(message.getMessage("FAIL_0001"));
+			map.set("message", message.getMessage("FAIL_0001"));
+			return map;
 		}
-		return super.ok(message.getMessage("SUCC_0001"));
-
+		return map;
 	}
 
 	/**

+ 6 - 1
src/main/java/com/style24/persistence/domain/CategoryGoods.java

@@ -1,6 +1,7 @@
 package com.style24.persistence.domain;
 
 import com.style24.persistence.TscBaseDomain;
+import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
 /**
@@ -15,7 +16,11 @@ public class CategoryGoods extends TscBaseDomain {
 
 	private Integer cateNo;		// 카테고리번호
 
-
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
 	
 
 }

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

@@ -65,6 +65,18 @@ public class MoreBetter extends TscBaseDomain {
 	List<MoreBetterBurden> burdenList;
 	List<MoreBetterSection> sectionGbList;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyCompCd;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiApplyGoods;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiExceptGoods;
+
 	// 날짜+시간
 	private String eventStdt;				// 다다익선시작일시
 	private String eventStHH;				// 다다익선시작일시

+ 11 - 1
src/main/java/com/style24/persistence/domain/MoreBetterGoods.java

@@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
+import java.util.List;
+
 
 /**
  * 품목 Domain
@@ -49,5 +51,13 @@ public class MoreBetterGoods extends TscBaseDomain {
 	private String[] multiBrand;
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	private String[] multiGoods;
+	private String[] multiApplyGoods;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiExceptGoods;
+/*
+	List<MoreBetterGoods> multiSupplyCompCd;
+	List<MoreBetterGoods> multiBrand;
+	List<MoreBetterGoods> multiGoods;
+	List<MoreBetterGoods> multiExceptGoods;*/
 }

+ 29 - 0
src/main/java/com/style24/persistence/domain/SizeInfo.java

@@ -0,0 +1,29 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 사이즈정보  Domain
+ *
+ * @author eskim
+ * @since 2021. 01. 26
+ */
+@SuppressWarnings("serial")
+@Data
+public class SizeInfo extends TscBaseDomain {
+
+	private String sizeGb;
+	private String sizeCate1Cd;
+	private String sizeCate1Nm;
+	private String sizeCate2Cd;
+	private String sizeCate2Nm;
+	private String sizeInfo;
+	private int dispOrd;
+	private String useYn;
+
+	private String selfYn;
+	private String brandCd;
+
+}

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

@@ -477,7 +477,7 @@
 		     , A.DISP_NM_LANG                /*노출명언어*/
 		     , A.RGB_CD                      /*RGB코드*/
 		     , A.DISTRIBUTION_GB             /*유통구분*/
-		     , B.SUPPLY_COMP_NM              /*업체명*/
+		     -- , B.SUPPLY_COMP_NM              /*업체명*/
 		     , A.ERP_BRAND_CD                /*ERP브랜드코드*/
 		     , A.SELF_YN                     /*자사여부*/
 		     , A.USE_YN                      /*사용여부*/
@@ -488,10 +488,13 @@
 		     , A.LOGO_FILE_NM                 /*로고파일명*/
 		     , A.DISP_ORD                    /*표시순서*/
 		FROM   TB_BRAND A
-		INNER JOIN TB_SUPPLY_COMPANY B ON A.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		INNER JOIN TB_BRAND_SUPPLY C ON A.BRAND_CD = C.BRAND_CD
+		INNER JOIN TB_SUPPLY_COMPANY B ON C.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD
+		</if>
 		WHERE  1 = 1
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
-		AND    A.SUPPLY_COMP_CD = #{supplyCompCd}
+		AND    C.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
 		<if test='distributionGb != null and distributionGb != ""'>
 		AND    A.DISTRIBUTION_GB = #{distributionGb}
@@ -516,7 +519,7 @@
 		<if test='useYn != null and useYn != ""'>
 		AND    A.USE_YN = #{useYn}
 		</if>
-		ORDER  BY A.SELF_YN DESC, A.SUPPLY_COMP_CD, A.DISP_ORD
+		ORDER  BY A.SELF_YN DESC,  A.DISP_ORD
 	</select>
 	
 	<!-- 담당MD 목록 -->

+ 20 - 87
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -114,119 +114,52 @@
 		</if>
 	</select>
 
-	<!-- 회원기본정보 -->
-	<select id="getCustomerInfo" parameterType="Integer" resultType="Customer">
-		/* TsaCustomer.getCustomerInfo */
-		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_ZIPCODE
-		     , 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
-		     , DATE_FORMAT(MANAGED_DT, '%Y%m%d%H%i%S') AS MANAGED_DT
-		     , SECEDE_RSN
-		     , SECEDE_DTL_RSN
-		     , DATE_FORMAT(SECEDE_DT, '%Y%m%d%H%i%S') AS 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_NO = #{custNo}
-	</select>
-
 	<!--회원정보 수정-->
 	<update id="updateCustomerInfo" parameterType="Customer">
 		/* TsaCustomer.updateCustomerInfo */
 		UPDATE TB_CUSTOMER
 		<set>
-		    <if test="custGb != null and custGb != ''">
-		     CUST_GB = #{custGb},
-		    </if>
-		    <if test="custGrade != null and custGrade !=''">
-		     CUST_GRADE = #{custGrade},
-		    </if>
+		      CUST_GB = #{custGb}
+		    , CUST_GRADE = #{custGrade}
 		    <if test="emailAgreeYn != null and emailAgreeYn != ''">
-		     EMAIL_AGREE_DT = CASE WHEN EMAIL_AGREE_YN = #{emailAgreeYn}
-		                      THEN EMAIL_AGREE_DT
-		                      ELSE NOW()
-		                      END,
-		     EMAIL_AGREE_YN = #{emailAgreeYn},
+		    , EMAIL_AGREE_DT = NOW()
+		    , EMAIL_AGREE_YN = #{emailAgreeYn}
 		    </if>
 		    <if test="smsAgreeYn != null and smsAgreeYn != ''">
-		     SMS_AGREE_DT = CASE WHEN SMS_AGREE_YN = #{smsAgreeYn}
-		                    THEN SMS_AGREE_DT
-		                    ELSE NOW()
-		                    END,
-		     SMS_AGREE_YN = #{smsAgreeYn},
+		    , SMS_AGREE_DT = NOW()
+		    , SMS_AGREE_YN = #{smsAgreeYn}
 		    </if>
 		    <if test="homeZipcode != null and homeZipcode != ''">
-		     HOME_ZIPCODE = #{homeZipcode},
+		    , HOME_ZIPCODE = #{homeZipcode}
 		    </if>
 		    <if test="homeBaseAddr != null and homeBaseAddr != ''">
-		     HOME_BASE_ADDR = #{homeBaseAddr},
+		    , HOME_BASE_ADDR = #{homeBaseAddr}
 		    </if>
 		    <if test="homeDtlAddr != null and homeDtlAddr != ''">
-		     HOME_DTL_ADDR = #{homeDtlAddr},
+		    , HOME_DTL_ADDR = #{homeDtlAddr}
 		    </if>
 		    <if test="birthYmd != null and birthYmd != ''">
-		     BIRTH_YMD = REPLACE(#{birthYmd}, '-', ''),
+		    , BIRTH_YMD = REPLACE(#{birthYmd}, '-', '')
 		    </if>
 		    <if test="email != null and email != ''">
-		     EMAIL = #{email},
+		    , EMAIL = #{email}
 		    </if>
 		    <if test="managedRsn != null and managedRsn != ''">
-		     MANAGED_DT = CASE WHEN MANAGED_RSN = #{managedRsn}
+		    , MANAGED_DT = CASE WHEN MANAGED_RSN = #{managedRsn}
 		                       AND  MANAGED_DTL_RSN = #{managedDtlRsn}
 		                  THEN MANAGED_DT
 		                  ELSE NOW()
-		                  END,
-		     MANAGED_RSN = #{managedRsn},
-		     MANAGED_DTL_RSN = #{managedDtlRsn},
+		                  END
+		    , MANAGED_RSN = #{managedRsn}
+		    , MANAGED_DTL_RSN = #{managedDtlRsn}
 		    </if>
 		    <if test="managedRsn == null or managedRsn == ''">
-		     MANAGED_RSN = NULL,
-		     MANAGED_DTL_RSN =  NULL,
-		     MANAGED_DT = NULL,
+		    , MANAGED_RSN = NULL
+		    , MANAGED_DTL_RSN =  NULL
+		    , MANAGED_DT = NULL
 		    </if>
-		     UPD_NO = #{updNo},
-		     UPD_DT = NOW()
+		    , UPD_NO = #{updNo}
+		    , UPD_DT = NOW()
 		</set>
 		WHERE CUST_NO = #{custNo}
 	</update>

+ 53 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -935,4 +935,57 @@
 		</otherwise>
 		</choose>
 	</delete>
+
+	<select id="getCategoryGoodsListCount" parameterType="CategoryGoods" resultType="int">
+		/* TsaDisplay.getCategoryGoodsListCount */
+		SELECT COUNT(*)
+		FROM ( SELECT A.GOODS_CD
+					, A.CATE_NO
+					, A.DISP_ORD
+					, A.REG_NO
+					, A.REG_DT
+			   FROM TB_CATE_GOODS A
+			   WHERE 1=1
+				 AND EXISTS ( SELECT 1
+							  FROM TB_CATE_4SRCH
+							  WHERE 1=1
+							  <if test='selLvl == "2"'>
+								AND CATE1_NO  = A.CATE_NO
+							  </if>
+							  <if test='selLvl != "2"'>
+								AND CATE1_NO  = #{cate1No}
+							    <if test='selLvl == "3"'>
+									AND CATE2_NO  = A.CATE_NO
+								</if>
+							    <if test='selLvl != "3"'>
+									AND CATE2_NO  = #{cate2No}
+							    	<if test='selLvl == "4"'>
+										AND CATE3_NO  = A.CATE_NO
+									</if>
+							    	<if test='selLvl == "5"'>
+										AND CATE3_NO  = #{cate3No}
+							    		AND CATE4_NO  = A.CATE_NO
+									</if>
+								</if>
+							  </if>
+				   )
+		) A
+		<if test="searchGb == null or searchGb =='BASIC'">
+			, TB_GOODS G
+		</if>
+		<if test="searchGb != null and searchGb =='EXCEL'">
+			, (SELECT G.*
+			, TMP_DISP_ORD
+			FROM TB_GOODS G
+			, (SELECT SEARCH_CD, MIN(DISP_ORD) AS TMP_DISP_ORD
+			FROM TB_SEARCH_DATA
+			WHERE REG_ID = #{regId}
+			GROUP BY SEARCH_CD
+			) D
+			WHERE G.GOODS_CD LIKE D.SEARCH_CD||'%'
+			OR G.SUPPLY_GOODS_CD LIKE D.SEARCH_CD||'%'
+			) G
+		</if>
+		WHERE A.GOODS_CD = G.GOODS_CD
+	</select>
 </mapper>

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

@@ -4282,4 +4282,87 @@
 		</if>
 		ORDER BY A.REG_DT DESC, A.GOODS_CD
 	</select>
+	
+	<!-- 사이즈 정보 목록 조회 -->
+	<select id="getSizeInfoList" parameterType="SizeInfo" resultType="SizeInfo">
+		/* TsaGoods.getSizeInfoList */
+		SELECT A.SIZE_GB
+		     , A.SIZE_CATE1_CD
+		     , CASE WHEN A.SIZE_GB = '1' AND A.SIZE_CATE1_CD <![CDATA[<>]]> '00' THEN B.BRAND_ENM
+		            WHEN A.SIZE_GB = '1' AND A.SIZE_CATE1_CD = '00' THEN '공통'
+		            ELSE  A.SIZE_CATE1_NM END AS SIZE_CATE1_NM
+		     , A.SIZE_CATE2_CD
+		     , A.SIZE_CATE2_NM
+		     , A.SIZE_INFO
+		     , A.DISP_ORD
+		     , A.USE_YN
+		     , FN_GET_USER_NM(A.REG_NO) AS REG_NM 
+		     , DATE_FORMAT(A.REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		     , FN_GET_USER_NM(A.UPD_NO) AS UPD_NM 
+		     , DATE_FORMAT(A.UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		FROM TB_SIZE_INFO A
+		LEFT OUTER JOIN TB_BRAND B ON (CASE WHEN A.SIZE_GB = '1' AND A.SIZE_CATE1_CD <![CDATA[<>]]> '00' THEN A.SIZE_CATE1_CD
+		                                  ELSE '0' END) = B.BRAND_CD
+		                           AND B.SELF_YN = 'Y'
+		
+		WHERE A.SIZE_GB = #{sizeGb}
+		<choose>
+		    <when test='sizeGb != null and sizeGb == "1"'>
+		        <if test='selfYn != null and selfYn != "N" '>
+		AND A.SIZE_CATE1_CD = '00'
+		        </if>
+		        <if test='brandCd != null and brandCd != "" '>
+		AND A.SIZE_CATE1_CD = #{brandCd}
+		        </if>
+		        <if test='sizeCate2Cd != null and sizeCate2Cd != "" '>
+		AND A.SIZE_CATE2_CD = #{sizeCate2Cd}
+		        </if>
+		    </when>
+		    <otherwise>
+		        <if test='sizeCate2Cd != null and sizeCate2Cd != "" '>
+		AND A.SIZE_CATE2_CD = #{sizeCate2Cd}
+		        </if>
+		    </otherwise>
+		</choose>
+	</select>
+	
+	<!-- 사이즈 정보 저장 -->
+	<insert id="saveSizeInfo" parameterType="SizeInfo">
+		/* TsaGoods.saveSizeInfo */
+		INSERT INTO TB_SIZE_INFO (
+		       SIZE_GB
+		     , SIZE_CATE1_CD
+		     , SIZE_CATE1_NM
+		     , SIZE_CATE2_CD
+		     , SIZE_CATE2_NM
+		     , SIZE_INFO
+		     , DISP_ORD
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{sizeGb}
+		     , #{sizeCate1Cd}
+		     , #{sizeCate1Nm}
+		     , #{sizeCate2Cd}
+		     , #{sizeCate2Nm}
+		     , #{sizeInfo}
+		     , #{dispOrd}
+		     , #{useYn}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       USE_YN = #{useYn}
+		      ,DISP_ORD = #{dispOrd}
+		      ,SIZE_INFO = #{sizeInfo}
+		      ,UPD_NO = #{updNo}
+		      ,UPD_DT = NOW()
+	</insert>
+	
 </mapper>

+ 10 - 4
src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml

@@ -570,25 +570,31 @@
 				   SELECT  G.GOODS_CD
 					 FROM  TB_GOODS G
 					WHERE  1=1
-						<if test="multiSupplyCompCd != null and multiSupplyCompCd != ''">
+						<if test="multiSupplyCompCd != null and multiSupplyCompCd.length>0">
 							AND G.SUPPLY_COMP_CD IN
 							<foreach collection="multiSupplyCompCd" item="item" index="index"  open="(" close=")" separator=",">
 								#{item}
 							</foreach>
 						</if>
-						<if test="multiBrand != null and multiBrand != ''">
+						<if test="multiBrand != null and multiBrand.length>0">
 							AND G.BRAND_CD IN
 							<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
 								#{item}
 							</foreach>
 						</if>
-						<if test="multiGoods != null and multiGoods != ''">
+						<if test="multiApplyGoods != null and multiApplyGoods.length>0">
 							OR G.GOODS_CD IN
-							<foreach collection="multiGoods" item="item" index="index"  open="(" close=")" separator=",">
+							<foreach collection="multiApplyGoods" item="item" index="index"  open="(" close=")" separator=",">
 								#{item}
 							</foreach>
 						</if>
 				)
+		   <if test="multiExceptGoods != null and multiExceptGoods.length>0">
+		   AND TMP.GOODS_CD NOT IN
+			   <foreach collection="multiExceptGoods" item="item" index="index"  open="(" close=")" separator=",">
+				   #{item}
+			   </foreach>
+		   </if>
 	</select>
 
 	<update id="updateMorebetterStat" parameterType="MoreBetter">

+ 14 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaRenderer.xml

@@ -147,20 +147,27 @@
 	<!-- 브랜드 목록 -->
 	<select id="getBrandList" parameterType="Brand" resultType="CommonCode">
 		/* TsaRenderer.getBrandList */
-		SELECT BRAND_CD  AS CD
-		     , BRAND_ENM AS CD_NM
-		FROM   TB_BRAND
+		SELECT A.BRAND_CD  AS CD
+		     , A.BRAND_ENM AS CD_NM
+		FROM   TB_BRAND A
+		<if test='supplyCompCd != null and supplyCompCd != ""'>
+		INNER JOIN TB_BRAND_SUPPLY C ON A.BRAND_CD = C.BRAND_CD
+		INNER JOIN TB_SUPPLY_COMPANY B ON C.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD
+		</if>
 		WHERE  1 = 1
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
-		AND    SUPPLY_COMP_CD = #{supplyCompCd}
+		AND    C.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
 		<if test='brandGrpNm != null and brandGrpNm != ""'>
-		AND    BRAND_GRP_NM = #{brandGrpNm}
+		AND    A.BRAND_GRP_NM = #{brandGrpNm}
 		</if>
 		<if test='useYn != null and useYn != ""'>
-		AND    USE_YN = #{useYn}
+		AND    A.USE_YN = #{useYn}
+		</if>
+		<if test='selfYn != null and selfYn != ""'>
+		AND    A.SELF_YN = #{selfYn}
 		</if>
-		ORDER  BY SUPPLY_COMP_CD, DISP_ORD
+		ORDER  BY A.SELF_YN DESC,  A.DISP_ORD
 	</select>
 
 	<!-- 권한별 브랜드 목록 -->

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

@@ -42,7 +42,7 @@
 					<tr>
 						<th>공급업체</th>
 						<td>
-							<select name="supplyComp">
+							<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>
 							</select>
@@ -694,9 +694,9 @@
 	// 담당MD 태그
 	var getBrandMdTag = function(mdNo, mdNm) {
 		var tag = '<div>\n';
-		tag += '	<input type="text" class="w100" name="mdNm" value="' + mdNm + '" onkeypress="if (event.keyCode == 13) { $(\'#mdIdx\').val(' + i + '); cfnOpenMdListPopup(\'fnSetMdInfo\', $(this).val());}"/>\n';
+		tag += '	<input type="text" class="w100" name="mdNm" value="' + gagajf.convNull(mdNm,'') + '" onkeypress="if (event.keyCode == 13) { $(\'#mdIdx\').val(' + i + '); cfnOpenMdListPopup(\'fnSetMdInfo\', $(this).val());}"/>\n';
 		tag += '	<button type="button" class="btn icn" id="btnSearchBrandMd" onclick="$(\'#mdIdx\').val(' + i + '); cfnOpenMdListPopup(\'fnSetMdInfo\');"><i class="fa fa-search"></i></button>\n';
-		tag += '	<input type="text" class="w100" name="mdNo" value="' + mdNo + '" readonly="readonly"/>\n';
+		tag += '	<input type="text" class="w100" name="mdNo" value="' + gagajf.convNull(mdNo,'') + '" readonly="readonly"/>\n';
 		tag += '	<button type="button" class="btn icn" onclick="fnDeleteRow(this);"><i class="fa fa-times" aria-hidden="true"></i></button>\n';
 		tag += '</div>\n';
 		return tag;

+ 60 - 52
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html

@@ -92,14 +92,14 @@
 									</colgroup>
 									<tbody>
 									<tr>
-										<th class="dashR">회원구분<i class="star"></i></th>
+										<th class="dashR">회원구분<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<select id="custGb" name="custGb">
 												<option th:if="${custGbList}" th:each="oneData, status : ${custGbList}" th:value="${oneData.cd}"
 														th:text="|${oneData.cdNm}|"></option>
 											</select>
 										</td>
-										<th class="dashR">회원등급<i class="star"></i></th>
+										<th class="dashR">회원등급<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<select id="custGrade" name="custGrade">
 												<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}"
@@ -156,7 +156,7 @@
 										</td>
 									</tr>
 									<tr>
-										<th class="dashR">휴대전화번호<i class="star"></i></th>
+										<th class="dashR">휴대전화번호<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<input type="hidden" name="cellPhnno" data-valid-name="휴대전화"/>
 											<select id="firstNo" name="firstNo">
@@ -171,14 +171,14 @@
 											<button type="button" id="btnCustSendLms" class="btn btn-info btn-lg">LMS전송</button>
 											<button type="button" id="btnCustCrtfd" class="btn btn-info btn-lg">번호변경</button>
 										</td>
-										<th class="dashR">SMS수신여부<i class="star"></i></th>
+										<th class="dashR">SMS수신여부<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<label class="rdoBtn"><input type="radio" name="smsAgreeYn" value="Y"/>수신</label>
 											<label class="rdoBtn"><input type="radio" name="smsAgreeYn" value="N"/>미수신</label>
 										</td>
 									</tr>
 									<tr>
-										<th class="dashR">이메일<i class="star"></i></th>
+										<th class="dashR">이메일<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<input type="hidden" name="email" data-valid-name="이메일"/>
 											<input type="text" id="emailId" name="emailId" class="w300"/>
@@ -191,7 +191,7 @@
 											</select>
 											<button type="button" id="btnCustSendEmail" class="btn btn-info btn-lg" >이메일발송</button>
 										</td>
-										<th class="dashR">메일수신여부<i class="star"></i></th>
+										<th class="dashR">메일수신여부<em class="required" title="필수"></em></th>
 										<td class="dashR">
 											<label class="rdoBtn"><input type="radio" name="emailAgreeYn" value="Y"/>수신</label>
 											<label class="rdoBtn"><input type="radio" name="emailAgreeYn" value="N"/>미수신</label>
@@ -207,7 +207,12 @@
 										<th class="dashR">내외국인</th>
 										<td class="dashR" id="foreignerYn" name="foreignerYn"></td>
 										<th class="dashR">탈퇴여부</th>
-										<td class="dashR" id="secedeRsnYn" name="secedeRsnYn"></td>
+										<td class="dashR">
+											<spna id="secedeRsnYn" name="secedeRsnYn" ></spna>
+											<button type="button" id="btnCustSecede" class="btn btn-danger btn-lg marL5" style="display: none">
+												회원탈퇴
+											</button>
+										</td>
 									</tr>
 									<tr>
 										<th class="dashR">SNS가입유형</th>
@@ -258,14 +263,14 @@
 									</colgroup>
 									<tbody>
 									<tr>
-										<th>배송지명<i class="star"></i></th>
+										<th>배송지명<em class="required" title="필수"></em></th>
 										<td>
 											<input type="text" class="w200" name="delvAddrNm" maxlength="30" required="required" data-valid-name="배송지명"/>
 											<label class="chkBox">
 												<input type="checkbox" name="defaultYn" value="Y"/>기본
 											</label>
 										</td>
-										<th>수령인<i class="star"></i></th>
+										<th>수령인<em class="required" title="필수"></em></th>
 										<td>
 											<input type="text" class="w200" name="recipNm" maxlength="10" required="required" data-valid-name="수령인"/>
 										</td>
@@ -290,7 +295,7 @@
 											<input type="text" class="w100" name="telLastNo" maxlength="4" data-valid-type="numeric"
 												   data-valid-name="전화번호"/>
 										</td>
-										<th>휴대전화번호<i class="star"></i></th>
+										<th>휴대전화번호<em class="required" title="필수"></em></th>
 										<td colspan="4">
 											<input type="hidden" id="recipPhnno" name="recipPhnno"/>
 											<select class="w100" id="recipFirstNo" name="recipFirstNo">
@@ -305,7 +310,7 @@
 										</td>
 									</tr>
 									<tr>
-										<th>주소<i class="star"></i></th>
+										<th>주소<em class="required" title="필수"></em></th>
 										<td colspan="5">
 											<input type="text" id="recipZipcode" name="recipZipcode" class="w100" maxlength="10" required="required" data-valid-name="주소"/>
 											<button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custAddrForm');">우편번호찾기</button>
@@ -454,7 +459,7 @@
 								</colgroup>
 								<tbody>
 								<tr>
-									<th>접촉유형<i class="star"></i></th>
+									<th>접촉유형<em class="required" title="필수"></em></th>
 									<td>
 										<select name="contactType" class="w150" required="required" data-valid-type="select" data-valid-name="접촉유형">
 											<option value="">[선택]</option>
@@ -462,7 +467,7 @@
 													th:text="${oneData.cdNm}"></option>
 										</select>
 									</td>
-									<th>접촉방법<i class="star"></i></th>
+									<th>접촉방법<em class="required" title="필수"></em></th>
 									<td>
 										<select name="contactMethod" class="w150" required="required" data-valid-type="select" data-valid-name="접촉방법">
 											<option value="">[선택]</option>
@@ -470,7 +475,7 @@
 													th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
 										</select>
 									</td>
-									<th>내용<i class="star"></i></th>
+									<th>내용<em class="required" title="필수"></em></th>
 									<td>
 										<textarea class="textareaR2 w600" name="contactContents" required="required" data-valid-name="내용"></textarea>
 										<button type="button" id="btnSaveContact" class="btn btn-success btn-lg">저장</button>
@@ -529,6 +534,7 @@
 	const contactTypeList = gagajf.convertToArray([[${contactTypeList}]]);			//회원접촉유형
 	const contactMethodList = gagajf.convertToArray([[${contactMethodList}]]);		//회원접촉방법
 	const genderGbList = gagajf.convertToArray([[${genderGbList}]]);				// 성별
+	let orgData;
 
 	//구매내역 그리드
 	const columnOrderDefs = [
@@ -948,35 +954,61 @@
 
 	});
 
+	$('#btnCustSecede').on('click', function () {
+		let custNo = $('#custInfoForm input[name=custNo]').val();
+		if (gagajf.isNull(custNo)) {
+			mcxDialog.alert("탈퇴시킬 회원번호가 없습니다.");
+			return;
+		}
+
+		let elementCustNo ='#custInfoForm input[name=custNo]';
+
+		const actionUrl = '/customer/secede/popup/form?elementCustNo='+ encodeURIComponent(elementCustNo)
+
+		cfnOpenModalPopup(actionUrl, 'popupCustSecedeForm');
+	});
+
+
 	// 기본정보 - 저장버튼
 	$('#btnCustInfoSave').on('click', function () {
-		let custInfoFrom = '#custInfoForm';
 
 		//휴대폰번호
-		if (!fnCheckValidationPhnno(custInfoFrom))
+		if (!fnCheckValidationPhnno('#custInfoForm'))
 			return false;
 
 		//이메일
-		if (!fnCheckValidationEmail(custInfoFrom))
+		if (!fnCheckValidationEmail('#custInfoForm'))
 			return false;
 
-		let managedRsn = $('#managedRsn').val();
-		let	managedDtlRsn = $('#managedDtlRsn').val();
+		let customer = $('#custInfoForm').serializeObject();
 
-		if (!gagajf.isNull(managedRsn) && gagajf.isNull(managedDtlRsn)) {
+		if (!gagajf.isNull(customer.managedRsn) && gagajf.isNull(customer.managedDtlRsn)) {
 			mcxDialog.alert("관리대상 지정 사유를 입력해주세요");
 			return;
 		}
 
+		// 데이터 변경 없으면 공배처리
+		if (customer.emailAgreeYn === orgData.emailAgreeYn) {
+			customer.emailAgreeYn = '';
+		}
+		// 데이터 변경 없으면 공배처리
+		if (customer.smsAgreeYn === orgData.smsAgreeYn) {
+			customer.smsAgreeYn = '';
+		}
+
+		// 마케팅 수신여부가 기존하고 바꼈는지 확인
+
+
 		mcxDialog.confirm("기본정보를 수정 하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function () {
-				let jsonData = JSON.stringify($(custInfoFrom).serializeObject());
+				let jsonData = JSON.stringify(customer);
 				//console.log(jsonData);
 				gagajf.ajaxJsonSubmit('/customer/info/save', jsonData, fnSearchCustInfo);
 			}
 		});
+
 	});
 
 	// 배송지정보 - 신규버튼
@@ -1159,8 +1191,7 @@
 					let foreignerYn = data.foreignerYn === 'Y' ? '외국인' : '내국인';
 					$('#foreignerYn').text(foreignerYn);
 
-					let secedeRsnYn = fnGetSecedeRsnYn(data.custStat, data.secedeRsn);
-					$('#secedeRsnYn').html(secedeRsnYn);
+					fnGetSecedeRsnYn(data.custStat, data.secedeRsn);	// 탈퇴여부
 
 					let snsType = fnGetSnsType(data.nvJoinId, data.kkJoinId, data.ysJoinId);
 					$('#snsType').text(snsType);
@@ -1176,6 +1207,8 @@
 					fnDisplayCellPhnno(data.maskingCellPhnno);		// 핸드폰
 					fnDisplayManaged(data.managedRsn);				// 관리대상
 
+					orgData = data;									// 기존 데이터
+
 				}
 			});
 	};
@@ -1313,30 +1346,6 @@
 	};
 
 
-	var fnCustomerSecede = function () {
-
-		if (gagajf.isNull(custNo)) {
-			mcxDialog.alert("탈퇴시킬 회원번호가 없습니다.");
-			return;
-		}
-
-		const actionUrl = "/customer/info/secede/form";
-		let paramsStr = "?custNo=" + custNo;
-		paramsStr += "&callBackFn=" + 'fnCustomerNotUseAfter';
-
-		cfnOpenModalPopup(actionUrl + paramsStr, 'popupCustSecede');
-	};
-
-	var fnCustomerNotUseAfter = function () {
-
-		if (!gagajf.isNull(fnSearch) && typeof fnSearch == "function") {
-			fnSearch();
-		}
-
-		uifnPopupClose('popupCustomerDetail');
-
-	};
-
 	// 관리대상
 	var fnDisplayManaged = function (managedRsn) {
 		const $managedRsnNm = $('#managedRsnNm');
@@ -1357,13 +1366,12 @@
 
 	// 탈퇴여부
 	var fnGetSecedeRsnYn = function (custStat, secedeRsn) {
+		const activeCustomer = 'G104_10';
 		let secedeRsnYn = gagajf.isNull(secedeRsn) ? '아니요' : '예';
-		if (custStat === '10') {
-			secedeRsnYn += '<button type="button" class="btn btn-danger btn-lg marL5" onClick="fnCustomerSecede();">';
-			secedeRsnYn += ' 회원탈퇴';
-			secedeRsnYn += '</button>';
+		$('#secedeRsnYn').text(secedeRsnYn);
+		if (custStat === activeCustomer) {
+			$('#btnCustSecede').show();
 		}
-		return secedeRsnYn;
 	}
 
 	// 휴대전화번호

+ 122 - 0
src/main/webapp/WEB-INF/views/customer/CustomerSecedePopupForm.html

@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : CustomerSecedePopupForm.html
+ * @desc    : 회원탈퇴처리 화면 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.26   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="800">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>회원탈퇴처리</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupCustSecedeForm')"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		<!-- CONTENT -->
+		<div class="panelContent">
+			<div class="panelStyle">
+				<form id="custSecedeForm" name="custSecedeForm">
+					<input type="hidden" name="custNo"/>
+					<table class="frmStyle">
+						<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" colspan="5">
+								<select name="secedeRsn" > <!-- 탈퇴사유 (공통코드G102) -->
+									<option value="">전체</option>
+									<option th:if="${secedeRsnList}" th:each="oneData, status : ${secedeRsnList}" 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="w600" id="secedeDtlRsn" name="secedeDtlRsn" />
+							</td>
+						</tr>
+						</tbody>
+					</table>
+				</form>
+			</div>
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" id="btnSaveSecede" class="btn btn-success btn-lg">탈퇴처리</button>
+				</li>
+			</ul>
+		</div>
+		<!-- //CONTENT -->
+	</div>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	const elementCustNo = [[${elementCustNo}]];
+
+	// 회원탈퇴
+	$("#btnSaveSecede").on("click",function() {
+		let custSecedeForm = $('#custSecedeForm').serializeObject();
+
+		if(gagajf.isNull(custSecedeForm.secedeRsn)){
+			mcxDialog.alert("탈퇴 사유를 선택해주세요.");
+			return;
+		}
+
+		mcxDialog.confirm('회원 탈퇴를 진행하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				gagajf.ajaxFormSubmit('/customer/secede/save', '#custSecedeForm', fnSaveCall);
+			}
+		});
+
+	});
+
+	var fnSaveCall = function (data) {
+		console.log('typeof', typeof data.isSuccess);
+		if (data.isSuccess) {
+			mcxDialog.alertC(data.resultMessage, {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					uifnPopupClose('popupCustSecedeForm');
+					uifnPopupClose('popupCustomerDetail');
+				}
+			});
+		} else {
+			mcxDialog.alert(data.resultMessage);
+			return;
+		}
+	}
+
+	var fnInitDataSet = function () {
+		let custNo = $(elementCustNo).val();
+		if(!gagajf.isNull(custNo)) {
+			$('#custSecedeForm input[name=custNo]').val(custNo);
+		}
+	}
+
+	$(document).ready(function() {
+
+		fnInitDataSet();
+
+	});
+	/*]]>*/
+</script>
+</html>

+ 72 - 9
src/main/webapp/WEB-INF/views/display/CategoryGoodsForm.html

@@ -185,6 +185,78 @@
 		}
 		$('#searchForm input[name=selLvl]').val(selLvl);
 
+		var data = { siteCd : 'G000_10'
+			, selLvl : selLvl
+			, cateGb : $('#searchForm select[name=cateGb]').val()
+			, cate1No : $('#searchForm select[name=cate1No]').val()
+			, cate2No : $('#searchForm select[name=cate2No]').val()
+			, cate3No : $('#searchForm select[name=cate3No]').val()
+			, cate4No : $('#searchForm select[name=cate4No]').val()
+		};
+
+		var jsonData = JSON.stringify(data);
+		gagajf.ajaxJsonSubmit('/display/category/list', jsonData, fnChangeCate);
+	}
+
+	// 조회하고 데이터 뿌려주기
+	var fnChangeCate = function (data){
+		let selLvl = Number($('#searchForm input[name=selLvl]').val()) + 1;
+		for (let i = 2; i <= 5; i++) {
+			if (i >= selLvl) {
+				$('#selCate' + i).html('<option value="">[카테고리' + (i - 1) + ']</option>');
+			}
+		}
+
+		let tag = '';
+		for (let i = 0; i < data.length; i++) {
+			if (data[i].useYn == 'Y') {
+				tag += '<option value="' + data[i].cateNo + '">[' + data[i].cateNo + '] ' + data[i].cateNm + '</option>';
+			}
+		}
+
+		$("#selCate" + selLvl).append(tag);
+		//$("#btnNew").click();
+
+		// 대카테고리 이상이면 상품 조회해서 그리드
+		if(selLvl > 1){
+			var data = { siteCd : 'G000_10'
+				, selLvl : selLvl
+				, cateGb : $('#searchForm select[name=cateGb]').val()
+				, cate1No : $('#searchForm select[name=cate1No]').val()
+				, cate2No : $('#searchForm select[name=cate2No]').val()
+				, cate3No : $('#searchForm select[name=cate3No]').val()
+				, cate4No : $('#searchForm select[name=cate4No]').val()
+			};
+
+			var jsonData = JSON.stringify(data);
+			gagajf.ajaxJsonSubmit('/display/category/goods/list', jsonData, fnCategoryGoodsListCallBack);
+		}
+	}
+
+	// 카테고리별 상품 조회하고 데이터 그리드
+	var fnCategoryGoodsListCallBack = function (data){
+
+	}
+
+	// 신규
+	$('#btnNew').on('click', function(){
+		//$("#detailForm")[0].reset();
+// 		$("#detailForm input[name=selLvl]").val('');
+		for (let i = 2; i <= 5; i++) {
+			$("#cateLvl" + i).show();
+		}
+	});
+
+	var fnChangeSearchCondition2 = function(val, selLvl) {
+		if (gagajf.isNull(val)) {
+			if (selLvl > 1) {
+				selLvl = selLvl - 1;
+			} else {
+				selLvl = 1;
+			}
+		}
+		$('#searchForm input[name=selLvl]').val(selLvl);
+
 		// Fetch data
 		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', function(data) {
 			let selLvl = Number($('#searchForm input[name=selLvl]').val()) + 1;
@@ -247,15 +319,6 @@
 		});
 	}
 
-	// 신규
-	$('#btnNew').on('click', function(){
-		$("#detailForm")[0].reset();
-// 		$("#detailForm input[name=selLvl]").val('');
-		for (let i = 2; i <= 5; i++) {
-			$("#cateLvl" + i).show();
-		}
-	});
-
 	// 저장
 	$('#btnSave').on('click', function() {
 		// 입력 값 체크

+ 5 - 3
src/main/webapp/WEB-INF/views/goods/GoodsListForm.html

@@ -256,8 +256,10 @@
 			</ul>
 			<ul class="panelBar">
 				<li class="right">
-					<button type="button" class="btn btn-info btn-sm"  onclick="fnGoodsStatArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">상태일괄적용</button>
-					<button type="button" class="btn btn-info btn-sm" onclick="fnGoodsStaSelfNotArea();" th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">입점상태일괄적용</button>
+				<th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}">
+					<button type="button" class="btn btn-info btn-sm"  onclick="fnGoodsStatArea();" >상태일괄적용</button>
+					<button type="button" class="btn btn-info btn-sm" onclick="fnGoodsStaSelfNotArea();" >입점상태일괄적용</button>
+				</th:block>	
 				</li>
 			</ul>
 			<label class="off">
@@ -371,7 +373,7 @@
 								<label class="rdoBtn"><input type="radio" name="statSelfYn" id="statSelfYnY" value="Y"  checked/>자사</label>
 								<label class="rdoBtn"><input type="radio" name="statSelfYn" id="statSelfYnN" value="N"/>입점</label>
 								<select name="statSupplyCompCd" id="statSupplyCompCd">
-									<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[전체]</option>
+									<option value="" th:if="${sessionInfo.roleCd} != 'G001_B000'">[선택]</option>
 									<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 								</select>
 								<select name="delvFeeCdC" id="delvFeeCdC" >

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

@@ -0,0 +1,285 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : GoodsSizeInfoForm.html
+ * @desc    : 사이즈정보관리 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.26   eskim       최초 작성
+  *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<div class="panelContent">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/goods/size/info/list'}">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tr>
+						<th>구분<em class="required" title="필수"></em></th>
+						<td>
+							<label class="rdoBtn"><input type="radio" name="sizeGb"  value="1"  checked/>표준사이즈</label>
+							<label class="rdoBtn"><input type="radio" name="sizeGb"  value="2"/>측정가이드</label>
+						</td>
+					</tr>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-success btn-lg" id="btnSearch">조회</button>
+					</li>
+				</ul>
+			</form>
+			</div>
+		</div>
+		<!-- //검색조건 영역 -->
+		
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<div id="gridList" style="width: 100%; height: 300px;" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+		<!-- 등록/수정 -->
+		<form id="sizeInfoForm" name="sizeInfoForm" action="#" th:action="@{'/goods/size/info/save'}">
+		<!-- 등록/수정 -->
+		<div class="panelStyle" >
+			<ul>
+				<li>
+					<table class="w100p">
+						<colgroup>
+							<col style="width:35%;"/>
+							<col style="width:1%;"/>
+							<col/>
+						</colgroup>
+						<tr>
+							<td  class="vaT">
+								<table class="frmStyle" aria-describedby="등록/수정 폼">
+									<colgroup>
+										<col style="width:10%;"/>
+										<col/>
+									</colgroup>
+									<tr>
+										<th>구분<em class="required" title="필수"></em></th>
+										<td>
+											<label class="rdoBtn"><input type="radio" name="sizeGb"  value="1"  checked/>표준사이즈</label>
+											<label class="rdoBtn"><input type="radio" name="sizeGb"  value="2"/>측정가이드</label>
+										</td>
+									</tr>
+									<tr id="brandArea">	
+										<th>브랜드<em class="required" title="필수"></em></th>
+										<td>
+											<label class="rdoBtn"><input type="radio" name="selfYn"  value="N"  checked/>공통</label>
+											<label class="rdoBtn"><input type="radio" name="selfYn"  value="Y"/>자사브랜드</label>
+											<select name="brandCd" id="brandCd">
+												<option value="" >[선택]</option>
+												<option th:if="${selfBrandList}" th:each="oneData, status : ${selfBrandList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th>사이즈카테명</th>
+										<td>
+											<input type="text" class="w200" name="sizeCate2Nm" maxlength="10" data-valid-name="사이즈카테명" />
+											<input type="hidden" name="sizeCate2Cd" />
+										</td>
+									</tr>
+									<tr>
+										<th>노출순서<em class="required" title="필수"></em></th>
+										<td>
+											<input type="text" class="aR w100" name="dispOrd" maxlength="5" required="required" data-valid-type="integer" data-valid-name="노출순서"/>
+										</td>
+									</tr>
+									<tr>
+										<th>사용여부<em class="required" title="필수"></em></th>
+										<td>
+											<label class="rdoBtn"><input type="radio" name="useYn" value="Y"  checked/>Yes</label>
+											<label class="rdoBtn"><input type="radio" name="useYn" value="N"/>No</label>
+										</td>
+									</tr>
+								</table>
+							</td>
+							<td>&nbsp;</td>
+							<td>
+								<textarea class="textareaR4" name="sizeInfo" id="sizeInfo"></textarea>
+							</td>
+						</tr>
+					</table>
+				</li>
+			</ul>
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnNew">신규</button>
+					<button type="button" class="btn btn-success btn-lg" id="btnSave">저장</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+		<!-- 등록/수정 -->
+		</form>
+	</div>
+<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020103001"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=2020103001"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var sizeGbList = { "1":"표준사이즈", "2":"측정가이드" };
+	var useYnList = { "Y":"Yes", "N":"No" };
+	// specify the columns
+	var columnDefs = [
+		{headerName: 'No', width: 60, cellClass: 'text-center', valueGetter: function(params) { return params.node.rowIndex + 1 }},
+		{headerName: "구분", field: "sizeGb", width: 120, cellClass: 'text-center',
+			cellEditorParams: { values: gagaAgGrid.extractValues(sizeGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(sizeGbList, params.value); }
+		},
+		{headerName: "브랜드코드", field: "sizeCate1cd", width: 130, cellClass: 'text-center', hide: true},
+		{headerName: "브랜드명", field: "sizeCate1Nm", width: 150, cellClass: 'text-center'},
+		{headerName: "사이즈카테코드", field: "sizeCate2cd", width: 130, cellClass: 'text-center', hide: true},
+		{headerName: "카테명", field: "sizeCate2Nm", width: 150, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "표시순서", field: "dispOrd", width: 150, cellClass: 'text-center'},
+		{headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center'},
+		{headerName: "등록일자", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "등록자", field: "regNm", width: 130, cellClass: 'text-center'},
+		{headerName: "수정일자", field: "updDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return !gagajf.isNull(params.value) ? params.value.toDate("YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") : '';
+			}
+		},
+		{headerName: "수정자", field: "updNm", width: 130, cellClass: 'text-center'},
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	
+	//gridOptions.suppressRowClickSelection = true;
+	//gridOptions.rowHeight = 60; //이미지가 있을경우 높이 지정해야함.
+	
+	//  클릭
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field == "sizeCate2Nm"){
+			
+			$('#btnNew').click();
+			
+			$("#sizeInfoForm input:radio[name=sizeGb]:input[value=" + event.data.sizeGb + "]").click();
+			if ("1" == event.data.sizeGb){
+				$('#brandArea').removeClass('off').addClass('on');
+				if (event.data.sizeCate1Cd == "00") {
+					$("#sizeInfoForm input:radio[name=selfYn]:input[value=N]").click();
+				}else{
+					
+					$("#sizeInfoForm input:radio[name=selfYn]:input[value=Y]").click();
+					$("#sizeInfoForm select[name=brandCd]").val(event.data.sizeCate1Cd);	
+				}
+			}
+			$("#sizeInfoForm input[name=sizeCate2Nm]").val(event.data.sizeCate2Nm);
+			$("#sizeInfoForm input[name=sizeCate2Cd]").val(event.data.sizeCate2Cd);
+			$("#sizeInfoForm input[name=dispOrd]").val(event.data.dispOrd);
+			gagaSn.setContents('#sizeInfo', event.data.sizeInfo); 
+				
+			$('#sizeInfoForm input[name=sizeGb]').prop('readonly', true);
+		}
+	}
+
+	// 조회
+	$('#btnSearch').on('click', function() {
+		// Fetch data
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 신규버튼 초기화
+	$('#btnNew').on('click', function() {
+		$("#sizeInfoForm")[0].reset();
+		$('#sizeInfoForm input[name=sizeGb]').prop('readonly', false);
+		$("#sizeInfoForm input:radio[name=sizeGb]:input[value=1]").click();
+		$("#sizeInfoForm input:radio[name=selfYn]:input[value=N]").click();
+		gagaSn.setContents('#sizeInfo', ''); 
+	});
+	
+	// 자사/입점 변경여부
+	$("#sizeInfoForm input[name=sizeGb]").bind('change', function () {
+		var sizeGb = $(this).val();
+		if (sizeGb == "1"){
+			$('#brandArea').removeClass('off').addClass('on');
+		}else{
+			$('#brandArea').removeClass('on').addClass('off');
+		}
+		
+	});
+	
+	// 사이즈정보 저장
+	$("#btnSave").on('click', function() {
+		
+		// 표준사이즈, 자사브랜드일 경우
+		if("1" == $('#sizeInfoForm input[name=sizeGb]').val() && "Y" == $('#sizeInfoForm input[name=selfYn]').val() 
+			&& gagajf.isNull($('#sizeInfoForm input[name=brandCd]').val())){
+			mcxDialog.alert("자사브랜드를 선택하세요.");
+			return false;
+		}
+		
+		// validation
+		if (!gagajf.validation('#sizeInfoForm'))
+			return false;
+		
+		if (gagajf.isNull($('#sizeInfoForm input[name=sizeCate2Nm]').val())){
+			if ("1" == $('#sizeInfoForm input[name=sizeGb]').val() && "Y" == $('#sizeInfoForm input[name=selfYn]').val() ){
+				
+			}else{
+				mcxDialog.alertC("사이즈카테명을 입력해주세요.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$("#sizeInfoForm select[name=sizeCate2Nm]").focus();
+					}
+				});
+				return false;
+			}	
+		}
+		
+		
+		mcxDialog.confirm('저장하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				gagajf.ajaxFormSubmit($('#sizeInfoForm').prop('action'), '#sizeInfoForm', function() {
+					$('#btnNew').click();
+					$('#btnSearch').click();
+				});
+			}
+		});
+	});
+	
+	$(document).ready(function() {
+		
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+		
+		// Create a summernote
+		var snOptions = gagaSn.getToolbarOptions('media');
+		gagaSn.createSummernote(snOptions, '#sizeInfo');
+	});
+	
+/*]]>*/
+</script>
+
+</html>

+ 28 - 3
src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html

@@ -517,8 +517,8 @@
 			gridOptionsApplyBurdenList.api.setRowData(tmtbBurdenList);
 
 			$('#moreBetterForm input[name=tmtbNm]').val(tmtbMstInfo.tmtbNm);
-			$('#moreBetterForm input[name=tmtbStdt]').val(tmtbMstInfo.tmtbStdt);
-			$('#moreBetterForm input[name=tmtbEddt]').val(tmtbMstInfo.tmtbEddt);
+			$('#moreBetterForm input[name=eventStdt]').val(tmtbMstInfo.eventStdt);
+			$('#moreBetterForm input[name=eventEddt]').val(tmtbMstInfo.eventEddt);
 			$('#moreBetterForm #regInfo').text(tmtbMstInfo.regNm + "(" + tmtbMstInfo.regDt + ")");
 			$('#moreBetterForm #updInfo').text(tmtbMstInfo.updNm + "(" + tmtbMstInfo.updDt + ")");
 			$("input:radio[name='disTmtbStat']:radio[value="+tmtbMstInfo.tmtbStat+"]").prop('checked', true); // 선택하기
@@ -635,6 +635,27 @@
 		// 업체분담율 토탈 100% 넘는지 체크
 		fnBurdenValueCheck();
 
+		// 공급업체+브랜드 상품조회
+		var multiSupplyCompCd = [];
+		$.each(allSupplyCompData, function(idx, item) {
+			multiSupplyCompCd.push(item.supplyCompCd);
+		});
+
+		var multiBrand = [];
+		$.each(allBrandData, function(idx, item) {
+			multiBrand.push(item.brandCd);
+		});
+
+		var multiApplyGoods = [];
+		$.each(allApplyGoodsData, function(idx, item) {
+			multiApplyGoods.push(item.goodsCd);
+		});
+
+		var multiExceptGoods = [];
+		$.each(allExceptGoodsData, function(idx, item) {
+			multiExceptGoods.push(item.goodsCd);
+		});
+
 		var data = {
 			mode : $('#moreBetterForm input[name=mode]').val()
 			, tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
@@ -652,11 +673,15 @@
 			, exceptGoodsList : allExceptGoodsData
 			, burdenList : allApplyBurdenData
 			, sectionGbList : allSectionGbData
+			, multiSupplyCompCd : multiSupplyCompCd
+			, multiBrand : multiBrand
+			, multiApplyGoods : multiApplyGoods
+			, multiExceptGoods : multiExceptGoods
 		};
 
 		var jsonData = JSON.stringify(data);
 
-		//gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, fnMorebetterSaveCollback);
+		gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, fnMorebetterSaveCollback);
 	});
 
 	var fnMorebetterSaveCollback = function(result){