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

Merge branch 'develop' into card007

card007 5 лет назад
Родитель
Сommit
b78826c80e
35 измененных файлов с 2193 добавлено и 622 удалено
  1. 16 0
      src/main/java/com/style24/admin/biz/dao/TsaBusinessDao.java
  2. 18 0
      src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java
  3. 57 6
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  4. 37 1
      src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java
  5. 35 0
      src/main/java/com/style24/admin/biz/service/TsaBusinessService.java
  6. 19 1
      src/main/java/com/style24/admin/biz/service/TsaCouponService.java
  7. 58 1
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  8. 4 6
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  9. 35 30
      src/main/java/com/style24/admin/biz/service/TsaKakaoService.java
  10. 30 4
      src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  11. 15 1
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  12. 372 11
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  13. 27 2
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  14. 8 3
      src/main/java/com/style24/persistence/domain/Brand.java
  15. 1 0
      src/main/java/com/style24/persistence/domain/CustCoupon.java
  16. 13 19
      src/main/java/com/style24/persistence/domain/Delivery.java
  17. 1 1
      src/main/java/com/style24/persistence/domain/GoodsPriceRes.java
  18. 8 0
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  19. 7 0
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  20. 51 17
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  21. 86 24
      src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  22. 393 3
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  23. 2 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  24. 50 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  25. BIN
      src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar
  26. 112 57
      src/main/webapp/WEB-INF/views/business/BrandForm.html
  27. 1 1
      src/main/webapp/WEB-INF/views/business/SupplyCompanyPopupForm.html
  28. 365 372
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  29. 148 0
      src/main/webapp/WEB-INF/views/customer/EmailPopupForm.html
  30. 141 0
      src/main/webapp/WEB-INF/views/customer/LmsPopupForm.html
  31. 1 1
      src/main/webapp/WEB-INF/views/marketing/CouponListForm.html
  32. 43 25
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  33. 29 27
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  34. 1 1
      src/main/webapp/dx5/module/dextuploadx5-application-api.js
  35. 9 8
      src/main/webapp/ux/js/admin.popup.js

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

@@ -166,6 +166,14 @@ public interface TsaBusinessDao {
 	 */
 	void saveBrandSite(SiteBrand siteBrand);
 
+	/**
+	 * 브랜드 공급업체 목록
+	 * @param brandCd - 브랜드코드
+	 * @author eskim
+	 * @since 2021. 01. 21
+	 */
+	Collection<SiteBrand> getBrandSupplyList(String brandCd);
+
 	/**
 	 * 브랜드 등록
 	 * @param brand - 브랜드 정보
@@ -182,6 +190,14 @@ public interface TsaBusinessDao {
 	 */
 	void updateBrand(Brand brand);
 
+	/**
+	 * 브랜드별 업체 정보 저장
+	 * @param brand - 브랜드 정보
+	 * @author eskim
+	 * @since 2021. 01. 22
+	 */
+	void saveBrandSupply(Brand brandSupply);
+
 	/**
 	 * 출고처관리 저장
 	 * @param delvLoc - 출고처 정보

+ 18 - 0
src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java

@@ -166,4 +166,22 @@ public interface TsaCouponDao {
      * @since 2021-01-21
      */
 	void saveCouponCustPub(CustCoupon custPub);
+
+	/**
+	 * 특정 쿠폰 발급받은 고객 조회
+	 * @param  custCoupon
+	 * @return
+	 * @author xyzp1539
+	 * @since 2021-01-21
+	 */
+	ArrayList<CustCoupon> getCouponIssueCustList(CustCoupon custCoupon);
+
+	/**
+	 * 발급받은 쿠폰 유효기간 변경
+	 * @param
+	 * @return
+	 * @author xyzp1539
+	 * @since 2021-01-21
+	 */
+	void updateCustCouponAvailEddt(CustCoupon issueCust);
 }

+ 57 - 6
src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java

@@ -1,8 +1,11 @@
 package com.style24.admin.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
+import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.Order;
 import org.springframework.stereotype.Repository;
 
 import java.util.Collection;
@@ -22,7 +25,7 @@ public interface TsaCustomerDao {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 12
+	 * @since 2021. 01. 12
 	 */
 	Collection<Customer> getCustomerActiveList(CustomerSearch customerSearch);
 
@@ -31,24 +34,71 @@ public interface TsaCustomerDao {
 	 * @param custNo - 고객번호
 	 * @return Customer
 	 * @author jsshin
-	 * @since 2020. 01. 18
+	 * @since 2021. 01. 18
 	 */
-	Customer getCustomerInfo(String custNo);
+	Customer getCustomerInfo(Integer custNo);
 
 	/**
 	 * 회원정보 수정
 	 * @param customer - 고객정보
 	 * @author jsshin
-	 * @since 2020. 01. 20
+	 * @since 2021. 01. 20
 	 */
 	void updateCustomerInfo(Customer customer);
 
+	/**
+	 * 회원 주문내역
+	 * @param custNo - 고객번호
+	 * @return Collection<Order>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Order> getCustomerOrderList(Integer custNo);
+
+	/**
+	 * 회원상세-주소정보
+	 *
+	 * @param custNo - 고객번호
+	 * @return Collection<Delivery>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Delivery> getCustomerDeliveryAddrList(Integer custNo);
+
+	/**
+	 * 회원상세- 기본배송지 초기화
+	 *
+	 * @param delivery -배송지정보
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	void updateCustomerDeliveryAddrDefaultInit(Delivery delivery);
+
+	/**
+	 * 회원상세- 배송지 등록/수정
+	 *
+	 * @param delivery -배송지정보
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	void saveCustomerDeliveryAddr(Delivery delivery);
+
+	/**
+	 * 회원상세-쿠폰내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Coupon>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Coupon> getCustomerCouponList(Integer custNo);
+
 	/**
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 14
+	 * @since 2021. 01. 14
 	 */
 	Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch);
 
@@ -57,10 +107,11 @@ public interface TsaCustomerDao {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 14
+	 * @since 2021. 01. 14
 	 */
 	Collection<Customer> getCustomerDormantList(CustomerSearch customerSearch);
 
 	void createException();
 
+
 }

+ 37 - 1
src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java

@@ -21,7 +21,7 @@ public interface TsaMorebetterDao {
     /* CSB 진행 */
     /**
      * 다다익선 프로모션 리스트
-     * @param param
+     * @param moreBetter
      * @return
      * @author bin2107
      * @since 2020. 12. 28
@@ -186,5 +186,41 @@ public interface TsaMorebetterDao {
      * @since 2021. 1. 12
      */
     void deleteTmtbBurdenList(MoreBetterBurden moreBetterBurden);
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 조회
+     * @param moreBetterGoods
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    Collection<MoreBetterGoods> getMorebetterUsingGoodsList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 delete
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    void deleteTmtbGoodsTemp();
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 조회 insert
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    void createTmtbGoodsTemp();
+
+    /**
+     * 다다익선 중복 상품 조회
+     * @param moreBetterGoods
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    Collection<MoreBetterGoods> getMorebetterDuplicateList(MoreBetterGoods moreBetterGoods);
     /* // CSB 진행 */
 }

+ 35 - 0
src/main/java/com/style24/admin/biz/service/TsaBusinessService.java

@@ -10,6 +10,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.admin.biz.dao.TsaBusinessDao;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
@@ -230,6 +232,17 @@ public class TsaBusinessService {
 		}
 	}
 
+	/**
+	 * 브랜드 공급업체 목록
+	 * @param brandCd - 브랜드코드
+	 * @author eskim
+	 * @since 2021. 01. 21
+	 */
+	public Collection<SiteBrand> getBrandSupplyList(String brandCd) {
+		return businessDao.getBrandSupplyList(brandCd);
+	}
+
+
 	/**
 	 * 브랜드 등록/수정
 	 * @param brand - 브랜드 정보
@@ -265,11 +278,33 @@ public class TsaBusinessService {
 
 		}
 
+		// eskim
+		Collection<Brand> brandSupplyList = null;
+		ObjectMapper mapper = new ObjectMapper();
+
+		try {
+			if (brand.getBrandSupplyListInfo() != null) {
+				brandSupplyList = mapper.readValue(brand.getBrandSupplyListInfo(), new TypeReference<Collection<Brand>>() {
+				});
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
 		if (brand.getMode().equals("N")) { // 신규
 			businessDao.createBrand(brand);
 		} else { // 수정
 			businessDao.updateBrand(brand);
 		}
+
+		if (brandSupplyList != null && !brandSupplyList.isEmpty()) {
+			for(Brand brandSupply: brandSupplyList){
+				brandSupply.setRegNo(TsaSession.getInfo().getUserNo());
+				brandSupply.setBrandCd(brand.getBrandCd());
+				businessDao.saveBrandSupply(brandSupply);
+			}
+
+		}
 	}
 
 	/**

+ 19 - 1
src/main/java/com/style24/admin/biz/service/TsaCouponService.java

@@ -46,7 +46,6 @@ public class TsaCouponService {
 	@Transactional("shopTxnManager")
 	public void saveCoupon(Coupon params) {
 		String cpnId = "";		// 쿠폰ID
-
 		params.setRegNo(TsaSession.getInfo().getUserNo());
 		params.setUpdNo(TsaSession.getInfo().getUserNo());
 
@@ -161,6 +160,25 @@ public class TsaCouponService {
 
 			couponDao.saveCouponBurden(burden);
 		}
+
+		// 수정모드이고 변경된 쿠폰상태가 대기 , 중지 인경우 고객이 발급받은 내용도 변경
+		if(!StringUtils.isBlank(params.getCpnId()) &&
+				(params.getCpnStat().equals("G232_10") || params.getCpnStat().equals("G232_12")) ) {
+
+			CustCoupon custCoupon = new CustCoupon();
+			custCoupon.setCpnId(params.getCpnId());
+			custCoupon.setUseYn("Y");
+			ArrayList<CustCoupon> custList = couponDao.getCouponIssueCustList(custCoupon);
+
+			if(custList != null && custList.size() > 0 ) {
+				for(CustCoupon issueCust : custList) {
+					issueCust.setAvailEddt(params.getAvailEddt());
+					issueCust.setUpdNo(TsaSession.getInfo().getUserNo());
+
+					couponDao.updateCustCouponAvailEddt(issueCust);
+				}
+			}
+		}
 	}
 
 	/**

+ 58 - 1
src/main/java/com/style24/admin/biz/service/TsaCustomerService.java

@@ -4,8 +4,11 @@ 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.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
+import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.Order;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -47,7 +50,7 @@ public class TsaCustomerService {
 	 * @author jsshin
 	 * @since 2020. 01. 18
 	 */
-	public Customer getCustomerInfo(String custNo) {
+	public Customer getCustomerInfo(Integer custNo) {
 		return customerDao.getCustomerInfo(custNo);
 	}
 
@@ -79,6 +82,59 @@ public class TsaCustomerService {
 		coreCustomerService.updateCustomerPassword(customer);
 	}
 
+	/**
+	 * 회원 주문내역
+	 * @param custNo - 고객번호
+	 * @return Collection<Order>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Order> getCustomerOrderList(Integer custNo) {
+		return customerDao.getCustomerOrderList(custNo);
+	}
+
+	/**
+	 * 회원상세-주소정보
+	 *
+	 * @param custNo - 고객번호
+	 * @return Collection<Delivery>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Delivery> getCustomerDeliveryAddrList(Integer custNo) {
+		return customerDao.getCustomerDeliveryAddrList(custNo);
+	}
+
+	/**
+	 * 회원상세-주소정보 수정
+	 *
+	 * @param delivery - 배송지정보
+	 * @author jsshin
+	 * @since 2021. 1 21.
+	 */
+	@Transactional("shopTxnManager")
+	public void saveCustomerDeliveryAddr(Delivery delivery) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		delivery.setRegNo(userNo);
+		delivery.setUpdNo(userNo);
+		if ("Y".equals(delivery.getDefaultYn())) {
+			customerDao.updateCustomerDeliveryAddrDefaultInit(delivery);
+		}
+		customerDao.saveCustomerDeliveryAddr(delivery);
+	}
+
+	/**
+	 * 회원상세-쿠폰내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Coupon>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Coupon> getCustomerCouponList(Integer custNo) {
+		return customerDao.getCustomerCouponList(custNo);
+	}
+
 	/**
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
@@ -102,4 +158,5 @@ public class TsaCustomerService {
 	}
 
 
+
 }

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

@@ -1501,7 +1501,7 @@ public class TsaGoodsService {
 		float pntPrate = 0f;
 		float pntMrate = 0f;
 		float sellFeeRate = 0f;
-		String delvFeeCd = "";
+		//String delvFeeCd = "";
 		for (Brand tmpBrand : brandList) {
 
 			if ("10".equals(regGoods.getFormalGb())) {
@@ -1512,9 +1512,9 @@ public class TsaGoodsService {
 				pntMrate = tmpBrand.getPntMrate20();
 			}
 			sellFeeRate = tmpBrand.getSellFeeRate();
-			delvFeeCd = tmpBrand.getDelvFeeCd();
+			//delvFeeCd = tmpBrand.getDelvFeeCd();
 		}
-		regGoods.setDelvFeeCd(delvFeeCd);// 배송비전책코드
+		//regGoods.setDelvFeeCd(delvFeeCd);// 배송비전책코드
 		regGoods.setPntPrate(pntPrate); // 포인트적립율(PC)
 		regGoods.setPntMrate(pntMrate); // 포인트적립율(MOBILE)
 		regGoods.setSellFeeRate(sellFeeRate); // 판매수수료율
@@ -2300,8 +2300,6 @@ public class TsaGoodsService {
 
 			// 판매가 변경
 			if (goodsPriceRes.getResGoodsPrice() > 0) {
-				log.info("goodsPriceRes.getTagPrice() ={}", goodsPriceRes.getListPrice());
-				log.info("goodsPriceRes.getResGoodsPrice() ={}", goodsPriceRes.getResGoodsPrice());
 				goods.setDcRate((int)(this.getDcRate(goodsPriceRes.getListPrice(), goodsPriceRes.getResGoodsPrice())));
 				goods.setCurrBprice(goodsPriceRes.getCurrPrice());
 				goods.setCurrPrice(goodsPriceRes.getResGoodsPrice());
@@ -2309,7 +2307,7 @@ public class TsaGoodsService {
 			}
 
 			// 판매수수료율 변경
-			if (goodsPriceRes.getSellFeeRate() != null) {
+			if (Float.compare(goodsPriceRes.getSellFeeRate(), 0) > 0) {
 				goods.setSellFeeRate(goodsPriceRes.getSellFeeRate());
 				goodsDao.updateSellFeeRate(goods);
 			}

+ 35 - 30
src/main/java/com/style24/admin/biz/service/TsaKakaoService.java

@@ -65,6 +65,40 @@ public class TsaKakaoService {
 			// Do nothing
 		}
 	}
+
+	/**
+	 * 기본 LMS 발송
+	 * @param customer - LMS 정보
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@Transactional("shopTxnManager")
+	public void sendCustomerBasicLms(Customer customer) {
+		SsgDirectMessage dm = new SsgDirectMessage();
+		dm.setFdestine(customer.getCellPhnno());
+
+		GagaMap replaceInfo = new GagaMap();
+		replaceInfo.setString("siteNm", TscConstants.Style24Infomation.SITE_NAME.value());
+		replaceInfo.setString("custNm", customer.getCustNm());
+		replaceInfo.setString("content", customer.getContent());
+		replaceInfo.setString("callcenterTelNo", TscConstants.CALLCENTER_TEL_NO);
+		kakaoSender.sendLms(SsgKakaoSender.KakaoAnswerSq.BasicLms.value(), dm, replaceInfo);
+
+		try {
+			// 고객접촉이력 정보
+			CustContactHst custContactHst = new CustContactHst();
+			custContactHst.setContactType(TscConstants.ContactType.BASIC_LMS.value()); // 접촉유형:회원-기본LMS안내발송
+			custContactHst.setContactMethod(TscConstants.ContactMethod.LMS.value()); // 접촉방법:LMS(공통코드G055)
+			custContactHst.setContactContents("기본LMS안내발송");
+			custContactHst.setReceiverNo(customer.getCustNo());
+			custContactHst.setSenderNo(TsaSession.getInfo().getUserNo());
+			coreCustomerService.createCustomerContactHistory(custContactHst);
+		} catch (Exception e) {
+			log.error("error", e);
+			// Do nothing
+		}
+	}
+
 //
 //	/**
 //	 * 일대일문의 답변 알림톡 발송
@@ -213,35 +247,6 @@ public class TsaKakaoService {
 //		}
 //	}
 //
-//	/**
-//	 * 기본 LMS 발송
-//	 * @param customer - LMS 정보
-//	 * @author gagamel
-//	 * @since 2020. 11. 9
-//	 */
-//	@Transactional("shopTxnManager")
-//	public void sendCustomerBasicLms(AdmCustomer customer) {
-//		SsgDirectMessage dm = new SsgDirectMessage();
-//		dm.setFdestine(customer.getCellPhnno());
-//
-//		GagaMap replaceInfo = new GagaMap();
-//		replaceInfo.setString("siteNm", customer.getSiteNm());
-//		replaceInfo.setString("custNm", customer.getCustNm());
-//		replaceInfo.setString("content", customer.getContent());
-//		replaceInfo.setString("callcenterTelNo", TscConstants.CALLCENTER_TEL_NO);
-//		kakaoSender.sendLms(SsgKakaoSender.KakaoAnswerSq.BasicLms.value(), dm, replaceInfo);
-//
-//		try {
-//			// 고객접촉이력 정보
-//			customer.setContactType("207"); // 접촉유형:회원-기본LMS안내발송
-//			customer.setContactMethod(TscConstants.ContactMethod.LMS.value()); // 접촉방법:LMS(공통코드G055)
-//			customer.setContactContents("기본LMS안내발송");
-//			customer.setReceiverId(customer.getCustNo());
-//			customerService.createCustomerContactHistory(customer);
-//		} catch (Exception e) {
-//			log.error("error", e);
-//			// Do nothing
-//		}
-//	}
+
 
 }

+ 30 - 4
src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -4,18 +4,17 @@ import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.MoreBetter;
-import com.style24.persistence.domain.MoreBetterBurden;
-import com.style24.persistence.domain.MoreBetterGoods;
-import com.style24.persistence.domain.MoreBetterSection;
+import com.style24.persistence.domain.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import com.style24.admin.biz.dao.TsaMorebetterDao;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 /**
@@ -130,6 +129,7 @@ public class TsaMorebetterService {
     public void saveMoreBetterDetail(MoreBetter moreBetter) {
         Gson gson = new Gson();
         String jsonData = gson.toJson(moreBetter);
+        log.info("{ saveMoreBetterDetail jsonData}",jsonData);
 
         // <,> replace 처리
         moreBetter.setRegNo(TsaSession.getInfo().getUserNo());
@@ -389,5 +389,31 @@ public class TsaMorebetterService {
             morebetterDao.deleteTmtbBurdenList(moreBetterBurden);
         }
     }
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 TMEP 테이블 생성
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    @Transactional("shopTxnManager")
+    public void createMorebetterGoodsTemp(){
+        log.info("[deleteTmtbGoodsTemp a]{}");
+        morebetterDao.deleteTmtbGoodsTemp();
+        //morebetterDao.createTmtbGoodsTemp();
+    }
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 조회
+     * @param moreBetterGoods
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    public Collection<MoreBetterGoods> getMorebetterDuplicateList(MoreBetterGoods moreBetterGoods) {
+        return morebetterDao.getMorebetterDuplicateList(moreBetterGoods);
+    }
+
     /* // CSB 진행 */
 }

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

@@ -164,6 +164,7 @@ public class TsaBusinessController extends TsaBaseController {
 	@PostMapping("/supply/company/list")
 	@ResponseBody
 	public Collection<SupplyCompany> getSupplyCompanyList(@RequestBody SupplyCompany supplyComp) {
+		log.info("supplyComp={}", supplyComp);
 		return businessService.getSupplyCompanyList(supplyComp);
 	}
 
@@ -403,6 +404,19 @@ public class TsaBusinessController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
+	/**
+	 * 브랜드 공급업체 목록
+	 * @param brandCd - 브랜드코드
+	 * @return
+	 * @author eskim
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/brand/supply/list/{brandCd}")
+	@ResponseBody
+	public Collection<SiteBrand> getBrandSupplyList(@PathVariable String brandCd) {
+		return businessService.getBrandSupplyList(brandCd);
+	}
+
 	/**
 	 * 브랜드 등록/수정 처리
 	 * @param brand - 브랜드 정보
@@ -696,7 +710,7 @@ public class TsaBusinessController extends TsaBaseController {
 	@GetMapping("/comapny/search/form")
 	public ModelAndView companySearchForm(SupplyCompany company) {
 		ModelAndView mav = new ModelAndView();
-
+		log.info("company={}", company);
 		mav.addObject("params", company);
 		mav.setViewName("business/SupplyCompanyPopupForm");
 		return mav;

+ 372 - 11
src/main/java/com/style24/admin/biz/web/TsaCustomerController.java

@@ -6,10 +6,15 @@ import com.gagaframework.web.security.GagaPasswordEncoder;
 import com.style24.admin.biz.service.TsaCustomerService;
 import com.style24.admin.biz.service.TsaKakaoService;
 import com.style24.admin.biz.service.TsaSystemService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.CryptoUtils;
+import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
-import com.sun.xml.internal.bind.v2.TODO;
+import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.Order;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -17,6 +22,7 @@ import org.springframework.web.bind.annotation.PathVariable;
 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;
 
@@ -259,7 +265,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * 활동회원
 	 * @return ModelAndView
 	 * @author jsshin
-	 * @since 2020. 01. 12
+	 * @since 2021. 01. 12
 	 */
 	@GetMapping("/active/list/form")
 	public ModelAndView customerActiveListForm() {
@@ -290,7 +296,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 12
+	 * @since 2021. 01. 12
 	 */
 	@PostMapping("/active/list")
 	@ResponseBody
@@ -304,10 +310,10 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @param custNo - 고객번호
 	 * @return ModelAndView
 	 * @author jsshin
-	 * @since 2020. 01. 14
+	 * @since 2021. 01. 14
 	 */
 	@GetMapping("/detail/form/{custNo}")
-	public ModelAndView getCustomerDetailForm(@PathVariable String custNo) {
+	public ModelAndView getCustomerDetailForm(@PathVariable Integer custNo) {
 		ModelAndView mav = new ModelAndView();
 
 		// 사이트 목록
@@ -380,11 +386,11 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @param custNo - 고객번호
 	 * @return Customer
 	 * @author jsshin
-	 * @since 2020. 01. 18
+	 * @since 2021. 01. 18
 	 */
 	@GetMapping("/info/{custNo}")
 	@ResponseBody
-	public Customer getCustomerInfo(@PathVariable String custNo) {
+	public Customer getCustomerInfo(@PathVariable Integer custNo) {
 		TscSession.setAttribute("maskingYn", TsaSession.getInfo().getMaskingYn());
 		return customerService.getCustomerInfo(custNo);
 	}
@@ -394,7 +400,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @param customer - 고객정보
 	 * @return Customer
 	 * @author jsshin
-	 * @since 2020. 01. 20
+	 * @since 2021. 01. 21
 	 */
 	@PostMapping("/info/save")
 	@ResponseBody
@@ -410,7 +416,7 @@ public class TsaCustomerController extends TsaBaseController {
 	 * @return GagaResponse
 	 * @throws Exception
 	 * @author jsshin
-	 * @since 2020. 01. 20
+	 * @since 2021. 01. 21
 	 */
 	@PostMapping("/password/reset")
 	@ResponseBody
@@ -426,13 +432,368 @@ public class TsaCustomerController extends TsaBaseController {
 		customerService.updateCustomerPassword(customer);
 
 		// 카카오 알림톡
-		kakaoService.sendCustomerTempPassword(customer);
-
+		if (StringUtils.isNotBlank(customer.getCellPhnno())) {
+			kakaoService.sendCustomerTempPassword(customer);
+		}
 		// TODO: 2021.1.20 메일발송 서비스 붙여야함 - jsshin
 
 		return ok(message.getMessage("SUCC_0005"));
 	}
 
+	/**
+	 * 메시지 발송 팝업 화면
+	 *
+	 * @param elementCellPhnno - 휴대폰
+	 * @param elementCustNo - 고객일련번호
+	 * @param division - 호출화면구분
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/lms/popup/form")
+	public ModelAndView lmsPopupForm(@RequestParam(value = "elementCellPhnno", required = false) String elementCellPhnno
+									, @RequestParam(value = "elementCustNo") String elementCustNo
+									, @RequestParam(value = "division", required = false) String division) {
+		ModelAndView mav = new ModelAndView();
+		// 휴대폰 번호
+		mav.addObject("elementCellPhnno", elementCellPhnno);
+
+		// 고객 아이디
+		mav.addObject("elementCustNo", elementCustNo);
+
+		// 접속유형 구분값
+		mav.addObject("division", division);
+
+		mav.addObject("callBack", TscConstants.CALLCENTER_TEL_NO);
+
+		mav.setViewName("customer/LmsPopupForm");
+
+		return mav;
+	}
+
+
+	/**
+	 * 메시지 발송
+	 *
+	 * @param customer -고객정보
+	 * @return GagaResponse
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@PostMapping("/message/send")
+	@ResponseBody
+	public GagaResponse sendMessage(@RequestBody Customer customer) {
+		Customer custInfo = customerService.getCustomerInfo(customer.getCustNo());
+		customer.setCustNm(custInfo.getCustNm());
+
+		if (StringUtils.isNotBlank(customer.getCellPhnno())) {
+			kakaoService.sendCustomerBasicLms(customer);
+		}
+
+		return super.ok(message.getMessage("SUCC_0005"));
+	}
+
+	/**
+	 * 인증번호 발송
+	 *
+	 * @param customer -고객정보
+	 * @return GagaResponse
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@PostMapping("/certno/send")
+	@ResponseBody
+	public GagaResponse sendCustomerCertNo(@RequestBody Customer customer) {
+//		String certNo = GagaStringUtil.getRandomNumber(6);
+//		TsaSession.setAttribute("certNo", certNo);
+//		customer.setCertNo(certNo);
+//		log.info("certNo {}", certNo);
+//
+//		// 카카오알림톡 발송(카카오 템플릿 문구검수 후 변경 해야함)
+//		// 광고가 아니므로 SMS수신동의여부 체크할 필요 없음. 무조건 발송해야 함
+//		if (StringUtils.isNotBlank(customer.getCellPhnno())) {
+//			try {
+//				kakaoService.sendCustomerCertNo(customer);
+//			} catch (Exception e) {
+//				log.error(e.getMessage());
+//			}
+//
+//		}
+
+		return super.ok(message.getMessage("SUCC_0005"));
+	}
+
+	/**
+	 * 인증번호 확인
+	 *
+	 * @param customer -고객정보
+	 * @return Customer
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@PostMapping("/certno/confirm")
+	@ResponseBody
+	public Customer confirmCustomerCertNo(@RequestBody Customer customer) {
+		Customer custResult = new Customer();
+//		String certNo = TsaSession.getAttribute("certNo");
+//		String result = "N";
+//		if (certNo.equals(customer.getCrtfdNo())) {
+//			result = "Y";
+//		}
+//		custResult.setCrtfdNoYn(result);
+		return custResult;
+	}
+
+	/**
+	 * 메일 발송 팝업 화면
+	 *
+	 * @param elementEmail  - 이메일
+	 * @param elementCustNo - 고객일련번호
+	 * @param division - 호출화면구분
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/email/popup/form")
+	public ModelAndView emailPopupForm(@RequestParam(value = "elementEmail") String elementEmail
+									, @RequestParam(value = "elementCustNo") String elementCustNo
+									, @RequestParam(value = "division", required = false) String division) {
+
+		ModelAndView mav = new ModelAndView();
+
+		// 받는사람 이메일
+		mav.addObject("elementEmail", elementEmail);
+
+		// 고객 번호
+		mav.addObject("elementCustNo", elementCustNo);
+
+		mav.addObject("sendEmail", TscConstants.REP_EMAIL);
+
+		// 접속유형 구분값
+		mav.addObject("division", division);
+
+		mav.setViewName("customer/EmailPopupForm");
+
+		return mav;
+	}
+
+	/**
+	 * 이메일 발송
+	 *
+	 * @param customer -고객정보
+	 * @return GagaResponse
+	 * @throws Exception
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@PostMapping("/email/send")
+	@ResponseBody
+	public GagaResponse sendEmail(@RequestBody Customer customer) throws Exception {
+		Customer custInfo = customerService.getCustomerInfo(customer.getCustNo());
+		customer.setCustNm(custInfo.getCustNm());
+
+		// 메일 발송
+		if (StringUtils.isNotBlank(customer.getEmail())) {
+			//mailService.sendBasicMail(customer);
+		}
+
+		return super.ok(message.getMessage("SUCC_0005"));
+	}
+
+	/**
+	 * 회원상세-주문내역목록
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Order>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/order/list/{custNo}")
+	@ResponseBody
+	public Collection<Order> getCustomerOrderList(@PathVariable Integer custNo) {
+		return customerService.getCustomerOrderList(custNo);
+	}
+
+	/**
+	 * 회원상세-주소정보
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Delivery>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/delivery/list/{custNo}")
+	@ResponseBody
+	public Collection<Delivery> getCustomerDeliveryList(@PathVariable Integer custNo) {
+		return customerService.getCustomerDeliveryAddrList(custNo);
+	}
+
+	/**
+	 * 회원상세 - 주소지 저장
+	 *
+	 * @param delivery -배송지정보
+	 * @return GagaResponse
+	 * @author jsshin
+	 * @since 2021. 1. 21.
+	 */
+	@PostMapping("/delivery/addr/save")
+	@ResponseBody
+	public GagaResponse saveCustomerDeliveryAddr(@RequestBody Delivery delivery) {
+		customerService.saveCustomerDeliveryAddr(delivery);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+	/**
+	 * 회원상세-쿠폰내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Coupon>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/coupon/list/{custNo}")
+	@ResponseBody
+	public Collection<Coupon> getCustomerCouponList(@PathVariable Integer custNo) {
+		return customerService.getCustomerCouponList(custNo);
+	}
+
+	/**
+	 * 회원상세-1:1문의내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/counsel/list/{custNo}")
+	@ResponseBody
+	public Collection<Counsel> getCustomerCounselList(@PathVariable Integer custNo) {
+		//return customerService.getCustomerCounselList(custNo);
+		return null;
+	}
+
+	/**
+	 * 회원상세-상품문의내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/goodsQna/list/{custNo}")
+	@ResponseBody
+	public Collection<Counsel> getCustomerGoodsQnaList(@PathVariable Integer custNo) {
+		//return customerService.getCustomerGoodsQnaList(custNo);
+		return null;
+	}
+
+	/**
+	 * 회원상세-상품문의 상세화면
+	 *
+	 * @param counselSq -상담일련번호
+	 * @return ModelAndView
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/goodsQna/detail/form/{counselSq}")
+	public ModelAndView goodsQnaDetailForm(@PathVariable String counselSq) {
+		ModelAndView mav = new ModelAndView();
+		// 문의상세
+		//mav.addObject("goodsQna", customerService.getGoodsQnaDetail(counselSq));
+		mav.setViewName("customer/GoodsQnaPopupForm");
+		return mav;
+	}
+
+
+	/**
+	 * 회원상세-포인트
+	 *
+	 * @param custNo -고객일련번호
+	 * @return TsaPoint
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+//	@GetMapping("/point/{custNo}")
+//	@ResponseBody
+//	public Point getCustomerPoint(@PathVariable Integer custNo) {
+//		return customerService.getCustomerPoint(custNo);
+//	}
+
+	/**
+	 * 회원상세-포인트내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<TsaPoint>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+//	@GetMapping("/point/list/{custNo}")
+//	@ResponseBody
+//	public Collection<TsaPoint> getCustomerPointList(@PathVariable Integer custNo) {
+//		return customerService.getCustomerPointList(custNo);
+//	}
+
+	/**
+	 * 회원상세-상품평내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<TsaReview>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+//	@GetMapping("/review/list/{custNo}")
+//	@ResponseBody
+//	public Collection<Review> getCustomerReviewList(@PathVariable Integer custNo) {
+//		return customerService.getCustomerReviewList(custNo);
+//	}
+
+	/**
+	 * 회원상세-회원등급변경이력
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<TsaCustomer>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+//	@GetMapping("/change/grade/list/{custNo}")
+//	@ResponseBody
+//	public Collection<TsaCustomer> getCustomerChageGradeList(@PathVariable Integer custNo) {
+//		return customerService.getCustomerChangeGradeList(custNo);
+//	}
+
+
+	/**
+	 * 회원상세-회원접촉이력
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Customer>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/contact/list/{custNo}")
+	@ResponseBody
+	public Collection<Customer> getCustomerContactList(@PathVariable Integer custNo) {
+		//return customerService.getCustomerContactList(custNo);
+		return null;
+	}
+
+	/**
+	 * 회원상세-회원접촉이력 생성
+	 *
+	 * @param customer -고객정보
+	 * @return GagaResponse
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@PostMapping("/contact/create")
+	@ResponseBody
+	public GagaResponse createCustomerContactHistory(@RequestBody Customer customer) {
+//		customer.setReceiverId(customer.getCustNo());
+//		customerService.createCustomerContactHistory(customer);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+
 	/**
 	 * 탈퇴회원
 	 * @return ModelAndView

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

@@ -4,6 +4,8 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.style24.persistence.TscPageRequest;
 import com.style24.persistence.domain.*;
 import org.apache.commons.lang3.StringUtils;
@@ -572,10 +574,33 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @author bin2107
 	 * @since 2021. 1. 5
 	 */
+
 	@PostMapping("/morebetter/save")
 	@ResponseBody
-	public GagaResponse saveMorebetterDetail(@RequestBody MoreBetter moreBetter) {
-		morebetterService.saveMoreBetterDetail(moreBetter);
+	public GagaResponse saveMorebetterDetail(@RequestBody MoreBetter moreBetter){
+		String[] multiSupplyCompCd = moreBetter.getSupplyCompArr().split(",");
+		String[] multiBrand = moreBetter.getBrandArr().split(",");
+
+		MoreBetterGoods moreBetterGoods = new MoreBetterGoods();
+
+		moreBetterGoods.setMultiSupplyCompCd(multiSupplyCompCd);
+		moreBetterGoods.setMultiBrand(multiBrand);
+		log.info("[saveMorebetterDetail moreBetterGoods]{}",moreBetterGoods);
+
+		// TMTB_GOODS_TEMP TABLE TRUNCATE -> 다른 다다에서 사용중인 상품 조회 -> INSERT
+		morebetterService.createMorebetterGoodsTemp();
+		//log.info("[saveMorebetterDetail createMorebetterGoodsTemp a]{}");
+		// 다른 다다에서 사용중인 상품 조회
+		Collection<MoreBetterGoods> duplicateGoodsList = morebetterService.getMorebetterDuplicateList(moreBetterGoods);
+
+		log.info("[duplicateGoodsList size]{}",duplicateGoodsList.size());
+
+		// SELECT -> 지금 내가 선택한 업체&브랜드에 해당하는 상품 조회 MINUS TMTB_GOODS_TEMP 상품
+		// 조회 건수 있으면 -> 해당 상품코드 엑셀로 던져주기
+		// 조회 건수 없으면 -> 저장으로 넘어감
+
+
+		//morebetterService.saveMoreBetterDetail(moreBetter);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
 

+ 8 - 3
src/main/java/com/style24/persistence/domain/Brand.java

@@ -1,5 +1,7 @@
 package com.style24.persistence.domain;
 
+import java.util.Collection;
+
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -27,9 +29,9 @@ public class Brand extends TscBaseDomain {
 	private String delvLocNm;		// 출고처명
 	private String erpBrandCd;		// ERP브랜드코드
 	private String selfYn;			// 자사여부(Y:자사, N:입점)
-	private String delvFeeCd;		// 배송비정책코드
-	private int delvFee;			// 기본배송비
-	private int minOrdAmt;			// 무료배송비최소주문금액
+//	private String delvFeeCd;		// 배송비정책코드
+//	private int delvFee;			// 기본배송비
+//	private int minOrdAmt;			// 무료배송비최소주문금액
 	private float sellFeeRate;		// 판매수수료율
 	private float pntPrate10;		// 포인트적립율(PC정상)
 	private float pntMrate10;		// 포인트적립율(모바일정상)
@@ -43,6 +45,9 @@ public class Brand extends TscBaseDomain {
 
 	private String newSysFileNm;	//신규이미지파일명
 
+	private String brandSupplyListInfo;	//브래드의 업체정보
+	private Collection<Brand> brandSupplyList; // 고시항목
+
 	// 검색조건
 	private String searchTxt;		// 검색어
 	private String callbackFn;		// 콜백함수

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

@@ -22,6 +22,7 @@ public class CustCoupon extends TscBaseDomain {
     private String  pubReasonDtl;           // 발행사유상세
     private String  usedDt;                 // 사용된일시
     private String  endAlimSendYn;          // 만료알림발송여부
+    private String  useYn;                  // 사용여부
 
     // 그리드 컬럼
     private String  custList;

+ 13 - 19
src/main/java/com/style24/persistence/domain/Delivery.java

@@ -37,7 +37,18 @@ public class Delivery extends TscBaseDomain {
 	private String searchTxt;
 	private String colorCd;
 	private String sysImgNm;
-	
+	private String delvAddrNm;
+	private String defaultYn;
+	private String recipNm;
+	private String recipTelno;
+	private String recipPhnno;
+	private String recipZipNo;
+	private String recipBaseAddr;
+	private String recipDtlAddr;
+	private String delvMemo;
+	private String delYn;
+	private Integer custNo;
+	private Integer custDelvAddrSq;
 	
 	/* 위로  작성  ('' ) ( '')*/
 	
@@ -56,10 +67,8 @@ public class Delivery extends TscBaseDomain {
 	private String mallGb;
 	private String mallGbNm;
 	private String ordStat;
-	private String custNo;
 	private String orderNm;
 	private String orderEmail;
-	private String recipNm;
 	private String colorKnm;
 
 	private Integer ordQty;
@@ -79,7 +88,6 @@ public class Delivery extends TscBaseDomain {
 	private String extmallOrdDtlNo;
 	private String supplyCompNm;
 	private String supplyGoodsCd;
-	private String delvMemo;
 	private String ordExchGb;
 	private String frontGb;
 	private String termGb;
@@ -158,11 +166,7 @@ public class Delivery extends TscBaseDomain {
 	private String extmallNm;
 	private String productId;
 
-	private String recipTelno;
-	private String recipPhnno;
-	private String recipPostNo;
-	private String recipBaseAddr;
-	private String recipDtlAddr;
+
 	private String dasRecipStsCd;
 	private String dasRecipIngDt;
 	private String dasRecipCplDt;
@@ -185,14 +189,9 @@ public class Delivery extends TscBaseDomain {
 	private String delvArId;
 	private String rejectReason;
 	private String chulgoQty;
-
 	private String ordExchGbYn;
 	private String payStDate;
 	private String payEdDate;
-
-	private String delYn;
-
-
 	private String goodsStatNm;
 
 	private String stDt;
@@ -201,11 +200,6 @@ public class Delivery extends TscBaseDomain {
 	private String goodsGb;
 
 	private String colorGrpFile;
-
-	private String custDelvAddrSq;
-	private String delvAddrNm;
-	private String defaultYn;
-	private String recipEmail;
 	private Integer invoiceQty;
 
 	private String delayDt;

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

@@ -18,7 +18,7 @@ public class GoodsPriceRes extends TscBaseDomain {
 	private String goodsCd;
 	private int resGoodsPrice;
 	private int endGoodsPrice;
-	private Float sellFeeRate;
+	private float sellFeeRate;
 	private String applyStdt;
 	private String applyEddt;
 	private String cfrmYn;

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
@@ -62,6 +63,13 @@ public class MoreBetter extends TscBaseDomain {
 	private String exceptGoodsList;
 	private String burdenList;
 	private String sectionGbList;
+	private String compBrandGoodsList;
+
+	private String supplyCompArr;
+	private String brandArr;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrCompBrandGoods;
 
 	// Pagination
 	private TscPageRequest pageable;

+ 7 - 0
src/main/java/com/style24/persistence/domain/MoreBetterGoods.java

@@ -40,4 +40,11 @@ public class MoreBetterGoods extends TscBaseDomain {
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] arrExceptGoodsSq;
+
+	// 다다 중복 상품 조회시 사용
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiSupplyCompCd;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
 }

+ 51 - 17
src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml

@@ -163,6 +163,16 @@
 		<if test="supplyCompCd != null and supplyCompCd != ''"> <!-- 브랜드관리 화면에서 사용 -->
 		AND    SC.SUPPLY_COMP_CD = #{supplyCompCd}
 		</if>
+		<if test='selfYn != null and (selfYn == "Y" or selfYn == "N")'>
+		<choose>
+		    <when test='selfYn  == "Y"'>
+		AND    SC.DISTRIBUTION_GB IN ('G065_10','G065_11','G065_12') 
+		    </when>
+		    <otherwise>
+		AND    SC.DISTRIBUTION_GB IN ('G065_20')
+		    </otherwise>
+		</choose>
+		</if>
 	</select>
 	
 	<!-- 공급업체 생성 -->
@@ -467,13 +477,13 @@
 		     , A.DISP_NM_LANG                /*노출명언어*/
 		     , A.RGB_CD                      /*RGB코드*/
 		     , A.DISTRIBUTION_GB             /*유통구분*/
-		     , A.SUPPLY_COMP_CD              /*업체코드*/
+		     -- , A.SUPPLY_COMP_CD              /*업체코드*/
 		     , B.SUPPLY_COMP_NM              /*업체명*/
-		     , A.DELV_LOC_CD                 /*출고처코드*/
+		     -- , A.DELV_LOC_CD                 /*출고처코드*/
 		     , C.DELV_LOC_NM                 /*출고처명*/
 		     , A.ERP_BRAND_CD                /*ERP브랜드코드*/
 		     , A.SELF_YN                     /*자사여부*/
-		     , A.DELV_FEE_CD                 /*배송비정책코드*/
+		     -- , A.DELV_FEE_CD                 /*배송비정책코드*/
 		     , A.SELL_FEE_RATE               /*판매수수료율*/
 		     , A.USE_YN                      /*사용여부*/
 		     , A.PNT_PRATE10                 /*포인트적립율(PC)*/
@@ -482,13 +492,13 @@
 		     , A.PNT_MRATE20                 /*포인트적립율(모바일)*/
 		     , A.LOGO_FILE_NM                 /*로고파일명*/
 		     , A.DISP_ORD                    /*표시순서*/
-		     , D.MIN_ORD_AMT                 /*무료배송최소금액*/
-		     , D.DELV_FEE                    /*배송비*/
+		    -- , D.MIN_ORD_AMT                 /*무료배송최소금액*/
+		    -- , D.DELV_FEE                    /*배송비*/
 		FROM   TB_BRAND A
 		INNER JOIN TB_SUPPLY_COMPANY B ON A.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD
 		LEFT OUTER JOIN TB_DELIVERY_LOC C ON A.DELV_LOC_CD = C.DELV_LOC_CD
-		LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON A.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
-		                                  AND A.DELV_FEE_CD =  D.DELV_FEE_CD
+		-- LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON A.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
+		--                                  AND A.DELV_FEE_CD =  D.DELV_FEE_CD
 		WHERE  1 = 1
 		<if test='supplyCompCd != null and supplyCompCd != ""'>
 		AND    A.SUPPLY_COMP_CD = #{supplyCompCd}
@@ -623,8 +633,22 @@
 		     , UPD_DT = NOW()
 	</insert>
 	
+	<!-- 브랜드 공급업체 목록 -->
+	<select id="getBrandSupplyList" parameterType="String" resultType="Brand">
+		/* TsaBusiness.getBrandSupplyList */
+		SELECT A.BRAND_CD
+		     , A.SUPPLY_COMP_CD
+		     , B.SUPPLY_COMP_NM
+		     , A.REG_NO
+		     , FN_GET_USER_NM(A.REG_NO) AS REG_NM
+		     , DATE_FORMAT(A.REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		FROM   TB_BRAND_SUPPLY A
+		INNER JOIN TB_SUPPLY_COMPANY B ON A.SUPPLY_COMP_CD = B.SUPPLY_COMP_CD
+		WHERE  BRAND_CD = #{brandCd}
+	</select>
+	
 	<!-- 브랜드 등록 -->
-	<insert id="createBrand" parameterType="Brand">
+	<insert id="createBrand" parameterType="Brand" keyProperty="brandCd">
 		/* TsaBusiness.createBrand */
 		INSERT INTO TB_BRAND (
 		       BRAND_CD
@@ -633,12 +657,9 @@
 		     , BRAND_GRP_NM
 		     , DISP_NM_LANG
 		     , RGB_CD
-		     , SUPPLY_COMP_CD
 		     , DISTRIBUTION_GB
 		     , SELF_YN
 		     , ERP_BRAND_CD
-		     , DELV_FEE_CD
-		     , DELV_LOC_CD
 		     , SELL_FEE_RATE
 		     , PNT_PRATE10
 		     , PNT_MRATE10
@@ -663,14 +684,11 @@
 		     , #{brandGrpNm}
 		     , #{dispNmLang}
 		     , #{rgbCd}
-		     , #{supplyCompCd}
 		     , #{distributionGb}
 		     , CASE WHEN #{distributionGb} IN ('G065_10','G065_11','G065_12') THEN 'Y'
 		            ELSE 'N'
 		       END
 		     , #{erpBrandCd}
-		     , #{delvFeeCd}
-		     , #{delvLocCd}
 		     , IFNULL(#{sellFeeRate},0)
 		     , IFNULL(#{pntPrate10},0)
 		     , IFNULL(#{pntMrate10},0)
@@ -701,14 +719,11 @@
 		     , BRAND_GRP_NM = #{brandGrpNm}
 		     , DISP_NM_LANG = #{dispNmLang}
 		     , RGB_CD = #{rgbCd}
-		     , SUPPLY_COMP_CD = #{supplyCompCd}
 		     , DISTRIBUTION_GB = #{distributionGb}
 		     , SELF_YN = CASE WHEN #{distributionGb} IN ('G065_10','G065_11','G065_12') THEN 'Y'
 		                      ELSE 'N'
 		                 END
 		     , ERP_BRAND_CD = #{erpBrandCd}
-		     , DELV_FEE_CD = #{delvFeeCd}
-		     , DELV_LOC_CD = #{delvLocCd}
 		     , SELL_FEE_RATE = IFNULL(#{sellFeeRate},0)
 		     , PNT_PRATE10 = IFNULL(#{pntPrate10},0)
 		     , PNT_MRATE10 = IFNULL(#{pntMrate10},0)
@@ -722,6 +737,25 @@
 		WHERE  BRAND_CD = #{brandCd}
 	</insert>
 	
+	<!-- 브랜드별 업체 정보 저장 -->
+	<insert id="saveBrandSupply" parameterType="Brand">
+		/* TsaBusiness.saveBrandSupply */
+		INSERT INTO TB_BRAND_SUPPLY ( 
+		    BRAND_CD
+		  , SUPPLY_COMP_CD
+		  , REG_NO
+		  , REG_DT
+		)
+		VALUES
+		(   #{brandCd}
+		  , #{supplyCompCd}
+		  , #{regNo}
+		  , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		     SUPPLY_COMP_CD = #{supplyCompCd} -- 무의미한 데이터
+	</insert>
+	
 	<!-- 재고연계관리 - 출고처 목록 -->
 	<select id="getStockSyncDeliveryLocList" parameterType="DeliveryLoc" resultType="DeliveryLoc">
 		/* TsaBusiness.getStockSyncDeliveryLocList */

+ 86 - 24
src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml

@@ -20,6 +20,7 @@
 					 , PD_GB
 					 , AVAIL_STDT
 					 , AVAIL_EDDT
+				     , AVAIL_DAYS
 					 , FN_GET_USER_NM(REG_NO) AS REG_NM
 					 , REG_DT
 				  FROM TB_COUPON
@@ -118,16 +119,11 @@
 		  , DC_PVAL
 		  , DC_MVAL
 		  , DC_AVAL
+		  , MAX_DC_AMT
 		  , PD_GB
-		  <choose>
-			  <when test='pdGb != null and pdGb == "P"'>
 		  , AVAIL_STDT
 		  , AVAIL_EDDT
-			  </when>
-			  <when test='pdGb != null and pdGb == "D"'>
 		  , AVAIL_DAYS
-			  </when>
-		  </choose>
 		  , CUST_PUB_LIMIT_QTY
 		  , TOT_PUB_LIMIT_QTY
 		  , ONE_PUB_QTY
@@ -145,14 +141,10 @@
 		  , UPD_DT
 		  , FIRST_YN
 		  , DOWN_YN
-		  <if test='custJoinYn != null and custJoinYn == "Y"'>
 		  , CUST_JOIN_STDT
 		  , CUST_JOIN_EDDT
-		  </if>
-		  <if test='firstYn != null and firstYn == "Y"'>
 		  , BUY_STDT
 		  , BUY_EDDT
-		  </if>
 		  <if test='cpnType != null and cpnType == "G230_20"'>
 		  , PAY_TYPE
 		  </if>
@@ -170,13 +162,17 @@
 		  , #{dcPval}
 		  , #{dcMval}
 		  , #{dcAval}
+		  , #{maxDcAmt}
 		  , #{pdGb}
 		  <choose>
 			  <when test='pdGb != null and pdGb == "P"'>
 		  , DATE_FORMAT(#{availStdt} , '%Y-%m-%d %H:%i:%s')
 		  , DATE_FORMAT(#{availEddt} , '%Y-%m-%d %H:%i:%s')
+		  , null
 			  </when>
 			  <when test='pdGb != null and pdGb == "D"' >
+		  , null
+		  , null
 		  , #{availDays}
 			  </when>
 		  </choose>
@@ -197,20 +193,33 @@
 		  , now()
 		  , #{firstYn}
 		  , #{downYn}
-		  <if test='custJoinYn != null and custJoinYn == "Y"'>
+		  <choose>
+			  <when test='custJoinYn != null and custJoinYn == "Y"'>
 		  , DATE_FORMAT(#{custJoinStdt} , '%Y-%m-%d %H:%i:%s')
 		  , DATE_FORMAT(#{custJoinEddt} , '%Y-%m-%d %H:%i:%s')
-		  </if>
-		  <if test='firstYn != null and firstYn == "Y"'>
+			  </when>
+			  <when test='custJoinYn != null and custJoinYn == "N"'>
+		  , null
+		  , null
+			  </when>
+		  </choose>
+		  <choose>
+			  <when test='firstYn != null and firstYn == "Y"'>
 		  , DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %H:%i:%s')
 		  , DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %H:%i:%s')
-		  </if>
+			  </when>
+			  <when test='firstYn != null and firstYn == "N"'>
+		  , DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %H:%i:%s')
+		  , DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %H:%i:%s')
+			  </when>
+		  </choose>
 		  <if test='cpnType != null and cpnType == "G230_20"'>
 		  , #{payType}
 		  </if>
 		  , #{custJoinYn}
 		) ON DUPLICATE KEY UPDATE
-			CPN_NM = #{cpnNm}
+		    CPN_ID = #{cpnId}
+		  ,	CPN_NM = #{cpnNm}
 		  , SITE_CD = #{siteCd}
 		  , AF_LINK_CD = #{afLinkCd}
 		  , USABLE_CUST_GB = #{usableCustGb}
@@ -223,14 +232,23 @@
 		  , DC_AVAL = #{dcAval}
 		  , MAX_DC_AMT = #{maxDcAmt}
 		  , PD_GB = #{pdGb}
-		  , AVAIL_STDT = #{availStdt}
-		  , AVAIL_EDDT = #{availEddt}
-		  , AVAIL_DAYS = #{availDays}
+		<choose>
+			<when test='pdGb != null and pdGb == "P"'>
+		  , AVAIL_STDT = DATE_FORMAT(#{availStdt} , '%Y-%m-%d %H:%i:%s')
+		  , AVAIL_EDDT = DATE_FORMAT(#{availEddt} , '%Y-%m-%d %H:%i:%s')
+		  , AVAIL_DAYS = null
+			</when>
+			<when test='pdGb != null and pdGb == "D"' >
+		  , AVAIL_STDT = null
+		  , AVAIL_EDDT = null
+	   	  , AVAIL_DAYS = #{availDays}
+			</when>
+		</choose>
 		  , CUST_PUB_LIMIT_QTY = #{custPubLimitQty}
 		  , TOT_PUB_LIMIT_QTY = #{totPubLimitQty}
 		  , ONE_PUB_QTY = #{onePubQty}
-		  , DOWN_STDT = #{downStdt}
-		  , DOWN_EDDT = #{downEddt}
+		  , DOWN_STDT = DATE_FORMAT(#{downStdt} , '%Y-%m-%d %H:%i:%s')
+		  , DOWN_EDDT = DATE_FORMAT(#{downEddt} , '%Y-%m-%d %H:%i:%s')
 		  , BUY_LIMIT_AMT = #{buyLimitAmt}
 		  , PLAN_SQ = #{planSq}
 		  , REISSUANCE = #{reissuance}
@@ -240,11 +258,29 @@
 		  , UPD_DT = now()
 		  , FIRST_YN = #{firstYn}
 		  , DOWN_YN = #{downYn}
-		  , CUST_JOIN_STDT = #{custJoinStdt}
-		  , CUST_JOIN_EDDT = #{custJoinEddt}
-		  , BUY_STDT = #{buyStdt}
-		  , BUY_EDDT = #{buyEddt}
+		<choose>
+			<when test='custJoinYn != null and custJoinYn == "Y"'>
+		  , CUST_JOIN_STDT = DATE_FORMAT(#{custJoinStdt} , '%Y-%m-%d %H:%i:%s')
+		  , CUST_JOIN_EDDT = DATE_FORMAT(#{custJoinEddt} , '%Y-%m-%d %H:%i:%s')
+			</when>
+			<when test='custJoinYn != null and custJoinYn == "N"'>
+		  , CUST_JOIN_STDT = null
+		  , CUST_JOIN_EDDT = null
+			</when>
+		</choose>
+		<choose>
+			<when test='firstYn != null and firstYn == "Y"'>
+		  , BUY_STDT = DATE_FORMAT(#{buyStdt} , '%Y-%m-%d %H:%i:%s')
+		  , BUY_EDDT = DATE_FORMAT(#{buyEddt} , '%Y-%m-%d %H:%i:%s')
+			</when>
+			<when test='firstYn != null and firstYn == "N"'>
+		  , BUY_STDT = null
+		  , BUY_EDDT = null
+			</when>
+		</choose>
+		<if test='cpnType != null and cpnType == "G230_20"'>
 		  , PAY_TYPE = #{payType}
+		</if>
 		  , CUST_JOIN_YN = #{custJoinYn}
 	</insert>
 
@@ -544,4 +580,30 @@
 		)
 	</insert>
 
+	<!-- 특정 쿠폰 발급받은 회원 조회-->
+	<select id="getCouponIssueCustList" parameterType="CustCoupon" resultType="CustCoupon">
+		/* TsaCoupon.getCouponIssueCustList */
+		SELECT CUST_CPN_SQ
+			 , CUST_NO
+			 , CPN_ID
+			 , AVAIL_STDT
+			 , AVAIL_EDDT
+		  FROM TB_CUST_COUPON
+		 WHERE CPN_ID = #{cpnId}
+		   AND USED_DT IS NOT NULL
+	</select>
+
+	<!-- 특정 쿠폰 발급받은 고객 유효기간 수정-->
+	<update id="updateCustCouponAvailEddt" parameterType="CustCoupon">
+		/* TsaCoupon.updateCustCouponAvailEddt */
+		UPDATE TB_CUST_COUPON
+		   SET AVAIL_EDDT = DATE_FORMAT(#{availEddt} , '%Y-%m-%d')
+			 , UPD_NO = #{updNo}
+			 , UPD_DT = now()
+		 WHERE CPN_ID = #{cpnId}
+		   AND USED_DT IS NOT NULL
+		   AND CUST_NO = #{custNo}
+		   AND CUST_CPN_SQ = #{custCpnSq}
+	</update>
+
 </mapper>

+ 393 - 3
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -115,7 +115,7 @@
 	</select>
 
 	<!-- 회원기본정보 -->
-	<select id="getCustomerInfo" parameterType="String" resultType="Customer">
+	<select id="getCustomerInfo" parameterType="Integer" resultType="Customer">
 		/* TsaCustomer.getCustomerInfo */
 		SELECT CUST_NO
 		     , CUST_ID
@@ -196,8 +196,8 @@
 		                    END,
 		     SMS_AGREE_YN = #{smsAgreeYn},
 		    </if>
-		    <if test="homePostNo != null and homePostNo != ''">
-		     HOME_POST_NO = #{homePostNo},
+		    <if test="homeZipNo != null and homeZipNo != ''">
+		     HOME_POST_NO = #{homeZipNo},
 		    </if>
 		    <if test="homeBaseAddr != null and homeBaseAddr != ''">
 		     HOME_BASE_ADDR = #{homeBaseAddr},
@@ -234,6 +234,396 @@
 		WHERE CUST_NO = #{custNo}
 	</update>
 
+	<!-- 회원 주문내역 -->
+	<select id="getCustomerOrderList" parameterType="Integer" resultType="Order">
+		/* TsaCustomer.getCustomerOrderList */
+		SELECT O.SITE_CD
+		     , O.ORD_NO
+		     , O.MALL_GB
+		     , OD.ORD_DTL_NO
+		     , DATE_FORMAT(O.PAY_DT, '%Y%m%d%H%i%S') AS PAY_DT
+		     , OD.DELV_STDT
+		     , OD.DELV_EDDT
+		     , O.ORD_TELNO
+		     , O.ORD_PHNNO
+		     , OD.ORD_DTL_STAT
+		     , OD.GOODS_CD
+		     , ODI.OPT_CD1              -- 색상
+		     , ODI.OPT_CD2              -- 사이즈
+		     , E.GOODS_NM
+		     , OD.ORD_QTY
+		     , OD.CURR_PRICE
+		     , C.CUST_NO
+		     , DA.RECIP_NM
+		FROM   TB_CUSTOMER C
+		INNER JOIN
+		       TB_ORDER O
+		ON     C.CUST_NO = O.CUST_NO
+		INNER JOIN
+		       TB_ORDER_DETAIL OD
+		ON     O.ORD_NO = OD.ORD_NO
+		INNER JOIN
+		       TB_ORDER_DETAIL_ITEM ODI
+		ON     OD.ORD_NO = ODI.ORD_NO
+		AND    OD.ORD_DTL_NO = ODI.ORD_DTL_NO
+		INNER JOIN
+		       TB_GOODS E
+		ON     OD.GOODS_CD = E.GOODS_CD
+		INNER JOIN
+		       TB_DELIVERY_ADDR DA
+		ON     OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
+		WHERE  C.CUST_NO = #{custNo}
+		ORDER BY O.ORD_NO DESC, OD.ORD_DTL_NO
+	</select>
+
+	<!-- 주소정보 내역 -->
+	<select id="getCustomerDeliveryAddrList" parameterType="Integer" resultType="Delivery">
+		/* TsaCustomer.getCustomerDeliveryAddrList */
+		SELECT C.CUST_ID
+		     , C.CUST_NO
+		     , CDA.CUST_DELV_ADDR_SQ
+		     , CDA.CUST_NO
+		     , CDA.DELV_ADDR_NM
+		     , CDA.DEFAULT_YN
+		     , CDA.RECIP_NM
+		     , CDA.RECIP_PHNNO
+		     , CDA.RECIP_TELNO
+		     , CDA.RECIP_ZIP_NO
+		     , CDA.RECIP_BASE_ADDR
+		     , CDA.RECIP_DTL_ADDR
+		     , CDA.DEL_YN
+		     , FN_GET_USER_NM(CDA.REG_NO)              AS REG_NM
+		     , DATE_FORMAT(CDA.REG_DT, '%Y%m%d%H%i%S') AS REG_DT
+		     , FN_GET_USER_NM(CDA.UPD_NO)              AS UPD_NM
+		     , DATE_FORMAT(CDA.UPD_DT, '%Y%m%d%H%i%S') AS UPD_DT
+		FROM   TB_CUSTOMER C
+		INNER JOIN
+		       TB_CUST_DELIVERY_ADDR CDA
+		ON     C.CUST_NO = CDA.CUST_NO
+		WHERE  C.CUST_NO = #{custNo}
+	</select>
+
+	<!-- 주소정보 - 기본배송지 초기화 -->
+	<update id="updateCustomerDeliveryAddrDefaultInit" parameterType="Delivery">
+		/* TsaCustomer.updateCustomerDeliveryAddrDefaultInit */
+		UPDATE TB_CUST_DELIVERY_ADDR
+		SET    DEFAULT_YN = 'N'
+		WHERE  CUST_NO = #{custNo}
+		AND    DEFAULT_YN = 'Y'
+		AND    DEL_YN = 'N'
+	</update>
+
+	<!--주소정보 등록/수정 -->
+	<update id="saveCustomerDeliveryAddr" parameterType="Delivery">
+		/* TsaCustomer.saveCustomerDeliveryAddr */
+		INSERT INTO TB_CUST_DELIVERY_ADDR (
+		       CUST_NO
+		     , DELV_ADDR_NM
+		     , DEFAULT_YN
+		     , RECIP_NM
+		     , RECIP_PHNNO
+		     , RECIP_TELNO
+		     , RECIP_ZIP_NO
+		     , RECIP_BASE_ADDR
+		     , RECIP_DTL_ADDR
+		     , DELV_MEMO
+		     , DEL_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{custNo}
+		     , #{delvAddrNm}
+		     , IFNULL(#{defaultYn}, 'N')
+		     , #{recipNm}
+		     , #{recipPhnno}
+		     , #{recipTelno}
+		     , #{recipZipNo}
+		     , #{recipBaseAddr}
+		     , #{recipDtlAddr}
+		     , #{delvMemo}
+		     , IFNULL(#{delYn}, 'N')
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
+		ON DUPLICATE KEY UPDATE
+		       DELV_ADDR_NM = #{delvAddrNm}
+		     , DEFAULT_YN = IFNULL(#{defaultYn}, 'N')
+		     , RECIP_NM = #{recipNm}
+		     , RECIP_PHNNO = #{recipPhnno}
+		     , RECIP_TELNO = #{recipTelno}
+		     , RECIP_ZIP_NO = #{recipZipNo}
+		     , RECIP_BASE_ADDR = #{recipBaseAddr}
+		     , RECIP_DTL_ADDR  = #{recipDtlAddr}
+		     , DEL_YN = IFNULL(#{delYn}, 'N')
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</update>
+
+	<!--회원 쿠폰내역  -->
+	<select id="getCustomerCouponList" parameterType="Integer" resultType="Coupon">
+		/* TsaCustomer.getCustomerCounponList */
+		WITH TAB1 AS (
+		              SELECT O.ORD_NO             AS ORD_NO
+		                   , MAX(OD.GOODS_CPN_SQ) AS GOODS_CPN_SQ
+		                   , MAX(OD.CART_CPN_SQ)  AS CART_CPN_SQ
+		                   , MAX(OD.CPN1_CPN_SQ)  AS CPN1_CPN_SQ
+		              FROM   TB_ORDER O
+		              INNER JOIN
+		                     TB_ORDER_DETAIL OD
+		              ON     O.ORD_NO = OD.ORD_NO
+		              WHERE  O.CUST_NO = #{custNo}
+		              GROUP BY O.ORD_NO
+		)
+		, TAB2 AS (
+		           SELECT ORD_NO
+		                , CPN1_CPN_SQ AS CPN_SQ
+		           FROM   TAB1
+		           WHERE  CPN1_CPN_SQ > 0
+		           AND    CPN1_CPN_SQ IS NOT NULL
+		           UNION ALL
+		           SELECT ORD_NO
+		                , GOODS_CPN_SQ AS CPN_SQ
+		           FROM   TAB1
+		           WHERE  GOODS_CPN_SQ > 0
+		           AND    GOODS_CPN_SQ IS NOT NULL
+		           UNION ALL
+		           SELECT ORD_NO
+		                , CART_CPN_SQ AS CPN_SQ
+		           FROM   TAB1
+		           WHERE  CART_CPN_SQ > 0
+		           AND    CART_CPN_SQ IS NOT NULL
+		)
+		SELECT C.SITE_CD
+		     , CC.CUST_CPN_SQ
+		     , CC.CUST_NO
+		     , C.CPN_ID
+		     , C.CPN_NM
+		     , DATE_FORMAT(CC.AVAIL_STDT, '%Y%m%d%H%i%S')            AS AVAIL_STDT
+		     , DATE_FORMAT(CC.AVAIL_EDDT, '%Y%m%d%H%i%S')            AS AVAIL_EDDT
+		     , CC.PUB_REASON
+		     , CC.PUB_REASON_DTL
+		     , DATE_FORMAT(CC.USED_DT, '%Y%m%d%H%i%S')               AS USED_DT
+		     , FN_GET_USER_NM(CC.REG_NO)                             AS REG_NM
+		     , FN_GET_USER_NM(CC.UPD_NO)                             AS USER_NM
+		     , DATE_FORMAT(CC.REG_DT, '%Y%m%d%H%i%S')                AS REG_DT
+		     , E.ORD_NO
+		FROM   TB_COUPON C
+		INNER JOIN
+		       TB_CUST_COUPON CC
+		ON     C.CPN_ID = CC.CPN_ID
+		INNER JOIN
+		       TB_CUSTOMER CU
+		ON     CC.CUST_NO = CU.CUST_NO
+		LEFT OUTER JOIN
+		       TAB2 E
+		ON     CC.CUST_CPN_SQ = E.CPN_SQ
+		WHERE  CC.CUST_NO = #{custNo}
+		ORDER BY E.ORD_NO DESC, CC.REG_DT DESC
+	</select>
+
+
+	<!--회원 포인트내역  -->
+	<select id="getCustomerPointList" parameterType="Integer" resultType="Point">
+		/* TsaCustomer.getCustomerPointList */
+		SELECT CC.*
+		FROM (
+		      SELECT DATE_FORMAT(CASE WHEN CPH.PNT_UPLOAD_STAT = '30'
+		                              THEN CPH.PNT_UPLOAD_DT
+		                          ELSE CPH.REG_DT END, '%Y-%m-%d' ) AS DT
+		           , CPH.PNT_HST_SQ
+		           , C.CUST_ID
+		           , C.CUST_NO
+		           , C.SITE_CD
+		           , CPH.OCCUR_GB
+		           , CPH.OCCUR_DTL_DESC
+		           , CPH.PNT_AMT
+		           , CPH.ORD_DTL_NO
+		           , CPH.REVIEW_SQ
+		           , DATE_FORMAT(CPH.SWITCH_DUE_DT,'%Y%m%d%H%i%S')  AS SWITCH_DUE_DT
+		           , CPH.PNT_UPLOAD_STAT
+		           , DATE_FORMAT(CPH.PNT_UPLOAD_DT,'%Y%m%d%H%i%S')  AS PNT_UPLOAD_DT
+		      FROM   TB_CUSTOMER C
+		      INNER JOIN
+		             TB_CUST_POINT_HST CPH
+		      ON     C.CUST_NO = CPH.CUST_NO
+		      WHERE  C.CUST_NO = #{custNo}
+		     ) CC
+		ORDER BY CC.DT DESC
+	</select>
+
+	<!-- 회원 상품권이력 -->
+	<select id="getCustomerGiftCardList" parameterType="Integer" resultType="GiftCard">
+		/* TsaCustomer.getCustomerGiftCardList */
+		SELECT *
+		FROM  TB_CUST_GIFTCARD_HST CGH
+		INNER JOIN
+		      TB_CUSTOMER C
+		ON    CGH.CUST_NO = C.CUST_NO
+		WHERE CGH.CUST_NO = #{custNo}
+	</select>
+
+	<!--회원 상품평내역  -->
+	<select id="getCustomerReviewList" parameterType="Integer" resultType="Review">
+		/* TsaCustomer.getCustomerReviewList */
+		SELECT CASE WHEN REVIEW_GB = 'P'
+		            THEN '[포토]'||R.REVIEW_TITLE
+		            ELSE R.REVIEW_TITLE
+		       END                          AS REVIEW_TITLE
+		     , R.REVIEW_SQ
+		     , R.GOODS_CD
+		     , R.CUST_NO
+		     , R.ORD_NO
+		     , R.ORD_DTL_NO
+		     , R.REVIEW_TITLE
+		     , R.REVIEW_CONTENT
+		     , R.SCORE
+		     , R.HEIGHT
+		     , R.WEIGHT
+		     , R.SCORE_SIZE
+		     , R.SCORE_COLOR
+		     , R.SCORE_FIT
+		     , R.SCORE_THICK
+		     , R.SCORE_WEIGHT
+		     , R.SCORE_BALL
+		     , R.GIVE_DUE_PNT
+		     , R.PNT_GIVE_STAT
+		     , R.DISP_YN
+		     , R.DEL_YN
+		     , R.CONFIRM_YN
+		     , FN_GET_USER_NM(R.CONFIRM_UNO)             AS CONFIRM_UNM
+		     , DATE_FORMAT(R.CONFIRM_DT, '%Y%m%d%H%i%S') AS CONFIRM_DT
+		     , FN_GET_USER_NM(R.REG_NO) AS REG_NM
+		     , R.REG_DT
+		     , FN_GET_USER_NM(R.UPD_NO) AS UPD_NM
+		     , R.UPD_DT
+		     , R.ADM_RPL
+		     , R.ADM_RPL_REG_NO
+		     , R.ADM_RPL_DT
+		FROM   TB_REVIEW R
+		     , TB_CUSTOMER C
+		WHERE  R.CUST_NO = C.CUST_NO
+		AND    R.CUST_NO = #{custNo}
+		ORDER BY R.REG_DT DESC
+	</select>
+
+	<!--회원 1:1문의 내역  -->
+	<select id="getCustomerCounselList" parameterType="Integer" resultType="Counsel">
+		/* TsaCustomer.getCustomerCouncelList */
+		SELECT CS.CUST_NO
+		     , CS.SITE_CD
+		     , CS.COUNSEL_CLSF
+		     , CS.COUNSEL_DCLSF
+		     , CS.CUST_NO
+		     , CS.CELL_PHNNO
+		     , CS.EMAIL
+		     , CS.EMAIL_REQ_YN
+		     , CS.EMAIL_SEND_YN
+		     , CS.SMS_REQ_YN
+		     , CS.SMS_SEND_YN
+		     , CS.REL_ORD_NO
+		     , CS.REL_GOODS_CD
+		     , CS.COUNSEL_TYPE
+		     , CS.QUEST_TITLE
+		     , CS.QUEST_CONTENT
+		     , CS.QUEST_DT
+		     , CS.ORG_FILE_NM1
+		     , CS.SYS_FILE_NM1
+		     , CS.ORG_FILE_NM2
+		     , CS.SYS_FILE_NM2
+		     , CS.ANS_STAT
+		     , CS.ANS_TRANS_YN
+		     , CS.ANS_COMP_CD
+		     , CS.ANS_TRANS_NO
+		     , CS.ANS_TRANS_DT
+		     , CS.ASSIGNED_CS_NO
+		     , CS.ASSIGNED_YMD
+		     , CS.ASSIGNED_HMS
+		     , CS.ANS_TITLE
+		     , CS.ANS_CONTENT
+		     , CS.ANS_NO
+		     , CS.ANS_DT
+		     , CS.SECRET_YN
+		FROM  TB_COUNSEL CS
+		INNER JOIN
+		      TB_CUSTOMER C
+		ON    CS.CUST_NO = C.CUST_NO
+		WHERE CS.COUNSEL_TYPE = 'C'
+		AND  CS.CUST_NO = #{custNo}
+	</select>
+
+	<!--회원 상품문의 내역  -->
+	<select id="getCustomerGoodsQnaList" parameterType="Integer" resultType="Counsel">
+		/* TsaCustomer.getCustomerGoodsQnaList */
+		SELECT CS.CUST_NO
+			 , CS.SITE_CD
+			 , CS.COUNSEL_CLSF
+			 , CS.COUNSEL_DCLSF
+			 , CS.CUST_NO
+			 , CS.CELL_PHNNO
+			 , CS.EMAIL
+			 , CS.EMAIL_REQ_YN
+			 , CS.EMAIL_SEND_YN
+			 , CS.SMS_REQ_YN
+			 , CS.SMS_SEND_YN
+			 , CS.REL_ORD_NO
+			 , CS.REL_GOODS_CD
+			 , CS.COUNSEL_TYPE
+			 , CS.QUEST_TITLE
+			 , CS.QUEST_CONTENT
+			 , CS.QUEST_DT
+			 , CS.ORG_FILE_NM1
+			 , CS.SYS_FILE_NM1
+			 , CS.ORG_FILE_NM2
+			 , CS.SYS_FILE_NM2
+			 , CS.ANS_STAT
+			 , CS.ANS_TRANS_YN
+			 , CS.ANS_COMP_CD
+			 , CS.ANS_TRANS_NO
+			 , CS.ANS_TRANS_DT
+			 , CS.ASSIGNED_CS_NO
+			 , CS.ASSIGNED_YMD
+			 , CS.ASSIGNED_HMS
+			 , CS.ANS_TITLE
+			 , CS.ANS_CONTENT
+			 , CS.ANS_NO
+			 , CS.ANS_DT
+			 , CS.SECRET_YN
+		FROM  TB_COUNSEL CS
+			      INNER JOIN
+		      TB_CUSTOMER C
+		      ON    CS.CUST_NO = C.CUST_NO
+		WHERE CS.COUNSEL_TYPE = 'G'
+		  AND  CS.CUST_NO = #{custNo}
+	</select>
+
+	<!--회원등급 변경내역  -->
+	<select id="getCustomerChangeGradeList" parameterType="Integer" resultType="Customer">
+		/* TsaCustomer.getCustomerChangeGradeList */
+		SELECT 1
+	</select>
+
+	<!-- 회원접촉이력 -->
+	<select id="getCustomerContactList" parameterType="Integer" resultType="CustContactHst">
+		/* TsaCustomer.getCustomerContactList */
+		SELECT CONTACT_HST_SQ
+		     , CONTACT_TYPE
+		     , CONTACT_METHOD
+		     , CONTACT_CONTENTS
+		     , SENDER_NO
+		     , DATE_FORMAT(SEND_DT, '%Y%m%d%H%i%S') AS SEND_DT
+		     , RECEIVER_NO
+		     , REG_NO
+		     , DATE_FORMAT(REG_DT, '%Y%m%d%H%i%S')  AS REG_DT
+		FROM   TB_CUST_CONTACT_HST
+		WHERE  RECEIVER_NO = #{custNo}
+		ORDER  BY REG_DT DESC
+	</select>
+
 	<!-- 탈퇴회원목록 -->
 	<select id="getCustomerSecedeList" parameterType="CustomerSearch" resultType="Customer">
 		/* TsaCustomer.getSecedeCustomerList */

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

@@ -911,8 +911,10 @@
 		     , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
 		     , E.CERT_NUM
 		     , E.CERT_DT
+		     , C.SUPPLY_VENDOR_CD
 		FROM TB_GOODS G
 		INNER JOIN TB_BRAND B ON G.BRAND_CD = B.BRAND_CD
+		INNER JOIN TB_SUPPLY_COMPANY C ON G.SUPPLY_COMP_CD = C.SUPPLY_COMP_CD 
 		LEFT OUTER JOIN TB_DELV_FEE_POLICY D ON G.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 		                                     AND G.DELV_FEE_CD =  D.DELV_FEE_CD
 		LEFT OUTER JOIN TB_GOODS_SAFE_NO E ON G.GOODS_CD = E.GOODS_CD

+ 50 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml

@@ -483,5 +483,55 @@
 			</foreach>
 		</if>
 	</delete>
+
+	<delete id="deleteTmtbGoodsTemp" timeout="300">
+		/* TsaMarketing.deleteTmtbGoodsTemp */
+		TRUNCATE TABLE TB_TMTB_GOODS_TEMP
+	</delete>
+
+	<insert id="createTmtbGoodsTemp">
+		/* TsaMarketing.createTmtbGoodsTemp */
+		INSERT INTO TB_TMTB_GOODS_TEMP
+			SELECT 	B.GOODS_CD
+			  FROM 	TB_TMTB A
+		INNER JOIN  TB_TMTB_APPLY_GOODS B
+				ON  A.TMTB_SQ = B.TMTB_SQ
+			WHERE 1=1
+			  AND NOW() BETWEEN DATE_FORMAT(A.TMTB_ST_DT, '%Y-%m-%d %H:%i:%S') AND DATE_FORMAT(A.TMTB_ED_DT, '%Y-%m-%d %H:%i:%S')
+			  AND A.TMTB_STAT = 'G232_11'
+			  AND B.GOODS_GB = 'G800_20'
+			  AND B.DEL_YN = 'N'
+			  AND B.GOODS_CD NOT IN (
+									SELECT	GOODS_CD
+									FROM	TB_TMTB_APPLY_GOODS C
+									WHERE	1=1
+									  AND		B.TMTB_SQ = C.TMTB_SQ
+									  AND		C.GOODS_GB = 'G800_30'
+								)
+	</insert>
+
+	<select id="getMorebetterDuplicateList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterDuplicateList */
+		SELECT TMP.GOODS_CD
+		  FROM TB_TMTB_GOODS_TEMP TMP
+		 WHERE 1=1
+		   AND TMP.GOODS_CD IN (
+				   SELECT  G.GOODS_CD
+					 FROM  TB_GOODS G
+					WHERE  1=1
+						<if test="multiSupplyCompCd != null and multiSupplyCompCd != ''">
+							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 != ''">
+							AND G.BRAND_CD IN
+							<foreach collection="multiBrand" item="item" index="index"  open="(" close=")" separator=",">
+								#{item}
+							</foreach>
+						</if>
+				)
+	</select>
 	<!--// CSB 진행 -->
 </mapper>

BIN
src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar


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

@@ -97,7 +97,7 @@
 		<div class="panelStyle">
 			<form id="detailForm" name="detailForm" action="#" th:action="@{'/business/brand/save'}">
 				<input type="hidden" name="mode" value="N"/>
-				
+				<input type="hidden" name="brandSupplyListInfo" />
 				<table class="frmStyle" aria-describedby="등록/수정 폼">
 					<colgroup>
 						<col style="width:10%;"/>
@@ -132,19 +132,20 @@
 							<label class="rdoBtn"><input type="radio" name="dispNmLang" value="KR">국문</label>
 						</td>
 					</tr>
-					<tr>	
+					<tr>
+					<!--	
 						<th>공급업체<i class="required" title="필수"></i></th>
 						<td>
-
-<!-- 							<select name="supplyCompCd" required="required" data-valid-name="공급업체">
-								<option value="">[선택]</option>
-							</select>
- -->							
 							<input type="text" class="w100" name="searchTxt" id="searchTxt" maxlength="20" />
 							<button type="button" class="btn icn" id="btnSearchSupplyComp"><i class="fa fa-search"></i></button>
 							<input type="text" class="w100" name="supplyCompNm" readonly="readonly"/>
 							<input type="hidden" class="w100" name="supplyCompCd" />
 						</td>
+					-->	
+						<th>판매수수료율<i class="required" title="필수"></i></th>
+						<td>
+							<input type="text" class="w100 aR" name="sellFeeRate" value="0" maxlength="3" required="required" data-valid-name="판매수수료율" data-valid-type="real"/>%
+						</td>
 						<th>유통구분<i class="required" title="필수"></i></th>
 						<td>
 							<select name="distributionGb" required="required" data-valid-name="유통구분">
@@ -153,7 +154,7 @@
 							</select>
 						</td>
 					</tr>
-					<tr>	
+					<!--  <tr>	
 						<th>출고처<i class="required" title="필수"></i></th>
 						<td>
 							<select name="delvLocCd">
@@ -167,14 +168,7 @@
 							</select>
 							<span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 변경된 배송정책은 이후 등록된 상품부터 적용됩니다.</span>
 						</td>
-					</tr>	
-					<tr>
-						<th>판매수수료율<i class="required" title="필수"></i></th>
-						<td>
-							<input type="text" class="w100 aR" name="sellFeeRate" value="0" maxlength="3" required="required" data-valid-name="판매수수료율" data-valid-type="real"/>%
-						</td>
-						<td colspan="2"></td>
-					</tr>
+					</tr>-->	
 					<tr>
 						<th>포인트적립율(PC정상)<i class="required" title="필수"></i></th>
 						<td>
@@ -209,12 +203,10 @@
 					</tr>
 					<tr>
 						<th>RGB코드</th>
-						<td>
+						<td  colspan="3">
 							<input type="text" class="w100 aR" name="rgbCd" maxlength="6" data-valid-name="REG코드" />
 							<span class="marL10 cRed"><i class="fa fa-info-circle" aria-hidden="true"></i> 브랜드메인 GBN 배경색으로 적용, 미 입력시 기본색상으로 설정됩니다.</span>
 						</td>
-						<td colspan="2">
-						</td>
 					</tr>
 					<tr id="brandImgArea" class="off">
 						<th>브랜드이미지</th>
@@ -256,11 +248,16 @@
 							<button type="button" class="btn btn-success btn-lg" id="btnSaveSiteBrand">전시사이트 수정</button>
 						</td>
 					</tr>
-					
-					
 				</table>
+				<div>
+					<ul class="panelBar">
+						<li class="left">
+							<button type="button" class="btn btn-base btn-lg" id="btnSearchSupplyComp">공급업체조회</button>
+						</li>
+					</ul>
+					<div id="gridList2" style="width: 100%; height: 200px" class="ag-theme-balham"></div>
+				</div>
 			</form>
-			
 			<!-- 버튼 배치 영역 -->
 			<ul class="panelBar">
 				<li class="right">
@@ -289,28 +286,28 @@
 		{headerName: "브랜드영문명", field: "brandEnm", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드국문명", field: "brandKnm", width: 150, cellClass: 'text-center'},
 		{headerName: "브랜드그룹명", field: "brandGrpNm", width: 150, cellClass: 'text-center'},
-		{
+		/*{
 			headerName: "공급업체", field: "supplyCompCd", width: 150, cellClass: 'text-center',
 			valueGetter: function (params) {
 				return gagaAgGrid.lookupValue(supplyCompList, params.data.supplyCompCd);
 			}
-		},
+		},*/
 		{
 			headerName: "유통구분", field: "distributionGb", width: 150, cellClass: 'text-center',
 			valueGetter: function (params) {
 				return gagaAgGrid.lookupValue(distributionGbList, params.data.distributionGb);
 			}
 		},
-		{headerName: "출고처코드", field: "delvLocCd", width: 120, cellClass: 'text-center'},
-		{headerName: "출고처명", field: "delvLocNm", width: 150, cellClass: 'text-center'},
+		/*{headerName: "출고처코드", field: "delvLocCd", width: 120, cellClass: 'text-center'},
+		{headerName: "출고처명", field: "delvLocNm", width: 150, cellClass: 'text-center'},*/
 		{headerName: "ERP브랜드코드", field: "erpBrandCd", width: 120, cellClass: 'text-center', hide: true},
-		{
+		/*{
 			headerName: "무료배송비기준",
 			children : [
 				{headerName: "기본배송비", field: "delvFee", width: 120, cellClass: 'text-center', valueFormatter: function(params) { return Number(params.value).addComma(); }},
 				{headerName: "최소주문금액", field: "minOrdAmt", width: 120, cellClass: 'text-center', valueFormatter: function(params) { return Number(params.value).addComma(); }}
 			]
-		},
+		},*/
 		{headerName: "판매수수료율(%)", field: "sellFeeRate", width: 150, cellClass: 'text-center'},
 		{
 			headerName: "포인트적립율(%)",
@@ -326,7 +323,16 @@
 		{headerName: "사용여부", field: "useYn", width: 80, cellClass: 'text-center'}
 	];
 
+	let columnDefs2 = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "공급업체코드", field: "supplyCompCd", width: 150, cellClass: 'text-center'},
+		{headerName: "공급업체명", field: "supplyCompNm", width: 150}
+	];
+	
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	let gridOptions2 = gagaAgGrid.getGridOptions(columnDefs2);
+	
+	gridOptions2.rowSelection = "multiple";
 
 	// Cell click
 	gridOptions.onCellClicked = function(event) {
@@ -345,28 +351,28 @@
 		$("#detailForm input[name=brandGrpNm]").val(event.data.brandGrpNm);
 		$("#detailForm input[name=erpBrandCd]").val(event.data.erpBrandCd);
 		$("#detailForm select[name=distributionGb]").val(event.data.distributionGb);
-		$("#detailForm input[name=supplyCompCd]").val(event.data.supplyCompCd);
-		$("#detailForm input[name=supplyCompNm]").val(event.data.supplyCompNm);
+		//$("#detailForm input[name=supplyCompCd]").val(event.data.supplyCompCd);
+		//$("#detailForm input[name=supplyCompNm]").val(event.data.supplyCompNm);
 		//fnGetSupplyCompCdList(event.data.supplyCompCd, event.data.delvFeeCd);
 		
 		// 출고처 정보
-		$.getJSON('/renderer/delvloc/list/' + event.data.supplyCompCd
-			, function(delvLocList) {
-				$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
-				$.each(delvLocList, function(idx, item) {
-					var optionHtml = '<option value="' + item.cd + '">[' + item.cd + '] '+ item.cdNm + '</option>\n';
-					$('#detailForm select[name=delvLocCd]').append(optionHtml);
-				});
-				
-				$("#detailForm select[name=delvLocCd]").val(event.data.delvLocCd);
-			}
-		);
+		//$.getJSON('/renderer/delvloc/list/' + event.data.supplyCompCd
+		//	, function(delvLocList) {
+		//		$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
+		//		$.each(delvLocList, function(idx, item) {
+		//			var optionHtml = '<option value="' + item.cd + '">[' + item.cd + '] '+ item.cdNm + '</option>\n';
+		//			$('#detailForm select[name=delvLocCd]').append(optionHtml);
+		//		});
+		//		
+		//		$("#detailForm select[name=delvLocCd]").val(event.data.delvLocCd);
+		//	}
+		//);
 		
 		// 배송비 정책
-		cfnCreateCombo('/renderer/delvFee/list/' + event.data.supplyCompCd, $('#detailForm select[name=delvFeeCd]'), "[선택]", event.data.delvFeeCd);
+		//cfnCreateCombo('/renderer/delvFee/list/' + event.data.supplyCompCd, $('#detailForm select[name=delvFeeCd]'), "[선택]", event.data.delvFeeCd);
 		
-		$("#detailForm input[name=delvFee]").val(Number(event.data.delvFee).addComma());
-		$("#detailForm input[name=minOrdAmt]").val(Number(event.data.minOrdAmt).addComma());
+		//$("#detailForm input[name=delvFee]").val(Number(event.data.delvFee).addComma());
+		//$("#detailForm input[name=minOrdAmt]").val(Number(event.data.minOrdAmt).addComma());
 		$("#detailForm input[name=sellFeeRate]").val(event.data.sellFeeRate);
 		$("#detailForm input[name=pntPrate10]").val(event.data.pntPrate10);
 		$("#detailForm input[name=pntMrate10]").val(event.data.pntMrate10);
@@ -396,6 +402,9 @@
 		// 로고이미지 영역 노출
 		$("#brandImgArea").removeClass("off").addClass("on");
 		
+		// 공급업체정보 조회
+		gagaAgGrid.fetch("/business/brand/supply/list/" + $('#detailForm input[name=brandCd]').val() , gridOptions2);
+		
 		$("#detailForm select[name=supplyCompCd]").val(event.data.supplyCompCd);
 	}
 
@@ -493,22 +502,51 @@
 */	
 	// 공급업체 선택시
 	$('#btnSearchSupplyComp').on('click', function() {
-/*
-		if (gagajf.isNull($("#detailForm input[name=searchTxt]").val())){
-			mcxDialog.alert('공급업체 검색어를 입력하세요.');
-			return false;
+		var selfYn = "";
+		selfYn = 'Y'; //자사
+		if($("#detailForm select[name=brandGb]").val() == 'E'){	//입점
+			selfYn = 'N';
 		}
-*/		
-		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'S', $("#detailForm input[name=searchTxt]").val());
-		
+
+		cfnOpenCompanyListPopup('fnSetSupplyCompInfo', 'S', $("#detailForm input[name=searchTxt]").val(), '' , selfYn);
 	});
 	
 	// 공급업체 조회 팝업에서 호출
 	var fnSetSupplyCompInfo = function(result) {
-		$("#detailForm input[name=supplyCompCd]").val(result[0].supplyCompCd);
-		$("#detailForm input[name=supplyCompNm]").val(result[0].supplyCompNm);
+		//$("#detailForm input[name=supplyCompCd]").val(result[0].supplyCompCd);
+		//$("#detailForm input[name=supplyCompNm]").val(result[0].supplyCompNm);
 		
-		// 출고처 정보
+		if (result.length < 1) return;
+		
+		// 기존상품
+		var brandSupplyList = gagaAgGrid.getAllRowData(gridOptions2);
+		var idx = brandSupplyList.length+1; 
+		
+		var isExist = false;
+		result.forEach(function(supply){
+			isExist = false;
+
+			gridOptions2.api.forEachNode(function(rowNode, index) {
+				if (supply.supplyCompCd == rowNode.data.supplyCompCd){
+					isExist = true;
+				}
+			});
+			
+			if(!isExist){
+				var data = { 
+						supplyCompCd: supply.supplyCompCd
+						, supplyCompNm: supply.supplyCompNm
+						};
+				//그리드 마지막에 추가해야함
+				gridOptions2.api.updateRowData({add: [data], addIndex: idx});
+				
+				idx++;
+			
+			}
+		});
+		gridOptions2.api.refreshCells();
+		
+		/* // 출고처 정보
 		$.getJSON('/renderer/delvloc/list/' + result[0].supplyCompCd
 			, function(delvLocList, status) {
 				$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
@@ -519,7 +557,7 @@
 			}
 		);
 		
-		cfnCreateCombo('/renderer/delvFee/list/' + result[0].supplyCompCd, $('#detailForm select[name=delvFeeCd]'), "[선택]");
+		cfnCreateCombo('/renderer/delvFee/list/' + result[0].supplyCompCd, $('#detailForm select[name=delvFeeCd]'), "[선택]"); */
 	}
 	
 	// 브랜드담당MD 목록
@@ -686,8 +724,8 @@
 		$("#detailForm input[name=mode]").val("N");
 		$("#detailForm select[name=brandGb]").trigger('change');
 		$("#detailForm select[name=brandGb]").removeAttr("disabled");
-		$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
-		$('#detailForm select[name=delvFeeCd]').empty().append('<option value="">[선택]</option>');
+		//$('#detailForm select[name=delvLocCd]').empty().append('<option value="">[선택]</option>');
+		//$('#detailForm select[name=delvFeeCd]').empty().append('<option value="">[선택]</option>');
 		
 		$("#detailForm input[type=checkbox]").removeClass("checked");
 		$("#detailForm input[type=checkbox]").parent("label").removeClass("checked");
@@ -763,13 +801,29 @@
 			}
 		}
 		
+		//공급업체
+		var allData = gagaAgGrid.getAllRowData(gridOptions2);
+		if (allData.length <= 0){
+			mcxDialog.alert("공급업체를 추가해 주세요.");
+			return false;
+		}
+		
 		mcxDialog.confirm('저장하시겠습니까?', {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
+				
+				var jsonData = JSON.stringify(allData);
+				$('#detailForm input[name=brandSupplyListInfo]').val(jsonData);
+				
 				gagajf.ajaxFormSubmit($('#detailForm').prop('action'), '#detailForm', function() {
 					$('#btnNew').trigger('click');
 					$('#btnSearch').trigger('click');
+
+					// 그리드 삭제
+					allData.forEach(function(item, index) {
+						gridOptions2.api.updateRowData({remove: [item]});
+					});
 				});
 			}
 		});
@@ -778,6 +832,7 @@
 	$(document).ready(function() {
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
+		gagaAgGrid.createGrid('gridList2', gridOptions2);
 		
 		$('#detailForm select[name=brandGb]').trigger('change');
 	});

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

@@ -27,7 +27,7 @@
 		<div class="panelContent">
 			<form id="searchCompanyListForm" name="searchCompanyListForm" action="#" th:action="@{'/business/supply/company/list'}" onsubmit="$('#btnSearchCompanyList').trigger('click'); return false;">
 				<input type="hidden" name="searchGb" value="NAME" />		<!-- 공급업체 목록 검색 조건은 업체명으로만 -->
-
+				<input type="hidden" name="selfYn" th:value="${params.selfYn}" />
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:15%;"/>

+ 365 - 372
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html

@@ -7,14 +7,14 @@
  * @desc    : 회원 상세 팝업 Page
  *============================================================================
  * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
+ * Copyright(C) 2021 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2020.01.18   jsshin     최초 작성
+ * 1.0  2021.01.18   jsshin     최초 작성
  *******************************************************************************
  -->
-<div class="modalPopup" id="popupCustomerDetail" data-width="1600">
+<div class="modalPopup" data-width="1600">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
@@ -37,7 +37,7 @@
 				<tbody>
 				<th>이름</th>
 				<td>
-					<span id="custNm" name="custNm"></span>
+					<span id="spanCustNm" name="spanCustNm"></span>
 					<span id="managedRsnNm" name="managedRsnNm" class="infoTxt cRed h5"></span>
 				</td>
 				<th>아이디</th>
@@ -80,142 +80,147 @@
 					<li class="tab on" id="tab1">
 						<!-- TAB1 PANELSTYLE -->
 						<div class="panelStyle">
-							<h4>기본정보</h4>
-							<table class="frmStyle">
-								<colgroup>
-									<col style="width:10%;"/>
-									<col style="width:40%;"/>
-									<col style="width:10%;"/>
-									<col/>
-								</colgroup>
-								<tbody>
-								<tr>
-									<th class="dashR">회원구분<i class="star"></i></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>
-									<td class="dashR">
-										<select id="custGrade" name="custGrade">
-											<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}"
-													th:text="|${oneData.cdNm}|"></option>
-										</select>
-									</td>
-								</tr>
-								<tr>
-									<th class="dashR">관리대상</th>
-									<td class="dashR">
-										<select id="managedRsn" name="managedRsn">
-											<option value="">일반</option>
-											<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}"
-													th:text="|${oneData.cdNm}|"></option>
-										</select>
-										<span class="infoTxt cRed h5" id="managedRsnDp" name="managedRsnDp"></span>
-									</td>
-									<th class="dashR">관리대상 지정 날짜</th>
-									<td class="dashR" id="managedDt" name="managedDt">
-									</td>
-								</tr>
-								<tr>
-									<th class="dashR">관리대상 지정 사유</th>
-									<td class="dashR" colspan="3">
-										<input type="text" id="managedDtlRsn" name="managedDtlRsn" class="w600" />
-									</td>
-								</tr>
-								<tr>
-									<th class="dashR">비밀번호</th>
-									<td class="dashR" colspan="3">
-										*******
-										<button type="button" id="btnResetPassword" class="btn btn-info btn-lg">초기화</button>
-										<span class="infoTxt cBlue">
-											<i class="fa fa-info-circle"></i>회원에게 임시비밀번호를 발송합니다. (이메일, 알림톡)
-										</span>
-									</td>
-								</tr>
-								<tr>
-									<th class="dashR">생년월일</th>
-									<td class="dashR">
-										<input type="text" id="birthYmd" name="birthYmd" class="schDate w100" data-valid-name="생년월일"/>
-									</td>
-									<th class="dashR">성별</th>
-									<td class="dashR" id="sexGb" name="sexGb"></td>
-								</tr>
-								<tr>
-									<th class="dashR">자택주소</th>
-									<td class="dashR" colspan="3">
-										<input type="text" id="homePostNo" name="homePostNo" class="w100" readonly="readonly"/>
-										<button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custInfo');">우편번호찾기</button>
-										<br/>
-										<input type="text" id="homeBaseAddr" name="homeBaseAddr" class="w300" readonly="readonly"/>
-										<input type="text" id="homeDtlAddr" name="homeDtlAddr" class="w300"/>
-									</td>
-								</tr>
-								<tr>
-									<th class="dashR">휴대전화번호<i class="star"></i></th>
-									<td class="dashR">
-										<select id="cellPhnno1" name="cellPhnno1">
-											<option value="">선택</option>
-											<option th:if="${nationalHpNumberList}" th:each="oneData, status : ${nationalHpNumberList}"
-													th:value="${oneData.cd}" th:text="|${oneData.cd}|"></option>
-										</select> -
-										<input type="text" id="cellPhnno2" name="cellPhnno2" class="w50" maxlength="4" required="required"
-											   data-valid-type="numeric" data-valid-name="휴대전화번호"/> -
-										<input type="text" id="cellPhnno3" name="cellPhnno3" class="w50" maxlength="4" required="required"
-											   data-valid-type="numeric" data-valid-name="휴대전화번호"/>
-										<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>
-									<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>
-									<td class="dashR">
-										<input type="text" id="email1" name="email1" class="w300"/>
-										@
-										<input type="text" id="email2" name="email2" class="w150"/>
-										<select name="emailDomain">
-											<option value="">선택하세요</option>
-											<option th:if="${emailDomainList}" th:each="oneData, status : ${emailDomainList}" th:value="${oneData.cd}"
-													th:text="|${oneData.cdNm}|"></option>
-										</select>
-										<button type="button" id="btnCustSendEmail" class="btn btn-info btn-lg" >이메일발송</button>
-									</td>
-									<th class="dashR">메일수신여부<i class="star"></i></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>
-									</td>
-								</tr>
-								<tr>
-									<th class="dashR">가입일시</th>
-									<td class="dashR" id="joinDt" name="joinDt"></td>
-									<th class="dashR">최종로그인일시</th>
-									<td class="dashR" id="loginDt" name="loginDt"></td>
-								</tr>
-								<tr>
-									<th class="dashR">내외국인</th>
-									<td class="dashR" id="foreignerYn" name="foreignerYn"></td>
-									<th class="dashR">탈퇴여부</th>
-									<td class="dashR" id="secedeRsnYn" name="secedeRsnYn"></td>
-								</tr>
-								<tr>
-									<th class="dashR">SNS가입유형</th>
-									<td class="dashR" id="snsType" name="snsType" colspan="3"></td>
-								</tr>
-								</tbody>
-							</table>
-							<ul class="panelBar">
-								<li class="right">
-									<button type="button" id="btnCustInfoSave" class="btn btn-success btn-lg">저장</button>
-								</li>
-							</ul>
+							<form id="custInfoForm" name="custInfoForm" action="#" method="post">
+								<input type="hidden" name="custNo" th:value="${custNo}"/>
+								<h4>기본정보</h4>
+								<table class="frmStyle">
+									<colgroup>
+										<col style="width:10%;"/>
+										<col style="width:40%;"/>
+										<col style="width:10%;"/>
+										<col/>
+									</colgroup>
+									<tbody>
+									<tr>
+										<th class="dashR">회원구분<i class="star"></i></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>
+										<td class="dashR">
+											<select id="custGrade" name="custGrade">
+												<option th:if="${custGradeList}" th:each="oneData, status : ${custGradeList}" th:value="${oneData.cd}"
+														th:text="|${oneData.cdNm}|"></option>
+											</select>
+										</td>
+									</tr>
+									<tr>
+										<th class="dashR">관리대상</th>
+										<td class="dashR">
+											<select id="managedRsn" name="managedRsn">
+												<option value="">일반</option>
+												<option th:if="${managedRsnList}" th:each="oneData, status : ${managedRsnList}" th:value="${oneData.cd}"
+														th:text="|${oneData.cdNm}|"></option>
+											</select>
+											<span class="infoTxt cRed h5" id="managedRsnDp" name="managedRsnDp"></span>
+										</td>
+										<th class="dashR">관리대상 지정 날짜</th>
+										<td class="dashR" id="managedDt" name="managedDt">
+										</td>
+									</tr>
+									<tr>
+										<th class="dashR">관리대상 지정 사유</th>
+										<td class="dashR" colspan="3">
+											<input type="text" id="managedDtlRsn" name="managedDtlRsn" class="w600" />
+										</td>
+									</tr>
+									<tr>
+										<th class="dashR">비밀번호</th>
+										<td class="dashR" colspan="3">
+											*******
+											<button type="button" id="btnResetPassword" class="btn btn-info btn-lg">초기화</button>
+											<span class="infoTxt cBlue">
+												<i class="fa fa-info-circle"></i>회원에게 임시비밀번호를 발송합니다. (이메일, 알림톡)
+											</span>
+										</td>
+									</tr>
+									<tr>
+										<th class="dashR">생년월일</th>
+										<td class="dashR">
+											<input type="text" id="birthYmd" name="birthYmd" class="schDate w100" data-valid-name="생년월일"/>
+										</td>
+										<th class="dashR">성별</th>
+										<td class="dashR" id="sexGb" name="sexGb"></td>
+									</tr>
+									<tr>
+										<th class="dashR">자택주소</th>
+										<td class="dashR" colspan="3">
+											<input type="text" id="homeZipNo" name="homeZipNo" class="w100" readonly="readonly"/>
+											<button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custInfoForm');">우편번호찾기</button>
+											<br/>
+											<input type="text" id="homeBaseAddr" name="homeBaseAddr" class="w300" readonly="readonly"/>
+											<input type="text" id="homeDtlAddr" name="homeDtlAddr" class="w300"/>
+										</td>
+									</tr>
+									<tr>
+										<th class="dashR">휴대전화번호<i class="star"></i></th>
+										<td class="dashR">
+											<input type="hidden" name="cellPhnno" data-valid-name="휴대전화"/>
+											<select id="firstNo" name="firstNo">
+												<option value="">선택</option>
+												<option th:if="${nationalHpNumberList}" th:each="oneData, status : ${nationalHpNumberList}"
+														th:value="${oneData.cd}" th:text="|${oneData.cd}|"></option>
+											</select> -
+											<input type="text" id="middleNo" name="middleNo" class="w50" maxlength="4" required="required"
+												   data-valid-type="numeric" data-valid-name="휴대전화번호"/> -
+											<input type="text" id="lastNo" name="lastNo" class="w50" maxlength="4" required="required"
+												   data-valid-type="numeric" data-valid-name="휴대전화번호"/>
+											<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>
+										<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>
+										<td class="dashR">
+											<input type="hidden" name="email" data-valid-name="이메일"/>
+											<input type="text" id="emailId" name="emailId" class="w300"/>
+											@
+											<input type="text" id="emailDomain" name="emailDomain" class="w150"/>
+											<select id="emailDomainList" name="emailDomainList">
+												<option value="">선택하세요</option>
+												<option th:if="${emailDomainList}" th:each="oneData, status : ${emailDomainList}" th:value="${oneData.cd}"
+														th:text="|${oneData.cdNm}|"></option>
+											</select>
+											<button type="button" id="btnCustSendEmail" class="btn btn-info btn-lg" >이메일발송</button>
+										</td>
+										<th class="dashR">메일수신여부<i class="star"></i></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>
+										</td>
+									</tr>
+									<tr>
+										<th class="dashR">가입일시</th>
+										<td class="dashR" id="joinDt" name="joinDt"></td>
+										<th class="dashR">최종로그인일시</th>
+										<td class="dashR" id="loginDt" name="loginDt"></td>
+									</tr>
+									<tr>
+										<th class="dashR">내외국인</th>
+										<td class="dashR" id="foreignerYn" name="foreignerYn"></td>
+										<th class="dashR">탈퇴여부</th>
+										<td class="dashR" id="secedeRsnYn" name="secedeRsnYn"></td>
+									</tr>
+									<tr>
+										<th class="dashR">SNS가입유형</th>
+										<td class="dashR" id="snsType" name="snsType" colspan="3"></td>
+									</tr>
+									</tbody>
+								</table>
+								<ul class="panelBar">
+									<li class="right">
+										<button type="button" id="btnCustInfoSave" class="btn btn-success btn-lg">저장</button>
+									</li>
+								</ul>
+							</form>
 						</div>
 						<!-- //TAB1 PANELSTYLE -->
 					</li>
@@ -236,80 +241,88 @@
 					<li id="tab3" class="tab">
 						<!-- TAB3 PANELSTYLE -->
 						<div class="panelStyle">
-							<h4>배송지정보</h4>
-							<div id="custAddrList" class="ag-theme-balham" style="width: 100%; height: 300px;" ></div>
+							<form id="custAddrForm" name="custAddrForm" action="#" method="post">
+								<input type="hidden" name="custNo" th:value="${custNo}"/>
+								<h4>배송지정보</h4>
+								<div id="custAddrList" class="ag-theme-balham" style="width: 100%; height: 300px;" ></div>
+								<table class="frmStyle">
+									<colgroup>
+										<col style="width:5%;"/>
+										<col style="width:25%;"/>
+										<col style="width:5%;"/>
+										<col style="width:25%;"/>
+										<col style="width:5%;"/>
+										<col style="width:25%;"/>
+										<col/>
+									</colgroup>
+									<tbody>
+									<tr>
+										<th>배송지명<i class="star"></i></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>
+										<td>
+											<input type="text" class="w200" name="recipNm" maxlength="10" required="required" data-valid-name="수령인"/>
+										</td>
+										<th>삭제여부</th>
+										<td>
+											<label class="chkBox">
+												<input type="checkbox" name="delYn" value="Y"/>
+											</label>
+										</td>
+									</tr>
+									<tr>
+										<th>전화번호</th>
+										<td >
+											<input type="hidden" id="recipTelno" name="recipTelno"/>
+											<select class="w100" id="telFirstNo" name="telFirstNo">
+												<option value="">선택</option>
+												<option th:if="${nationalNumberList}" th:each="oneData, status : ${nationalNumberList}"
+														th:value="${oneData.cd}" th:text="|${oneData.cd}|"></option>
+											</select> -
+											<input type="text" class="w100" name="telMiddleNo" maxlength="4" data-valid-type="numeric"
+												   data-valid-name="전화번호"/> -
+											<input type="text" class="w100" name="telLastNo" maxlength="4" data-valid-type="numeric"
+												   data-valid-name="전화번호"/>
+										</td>
+										<th>휴대전화번호<i class="star"></i></th>
+										<td colspan="4">
+											<input type="hidden" id="recipPhnno" name="recipPhnno"/>
+											<select class="w100" id="recipFirstNo" name="recipFirstNo">
+												<option value="">선택</option>
+												<option th:if="${nationalHpNumberList}" th:each="oneData, status : ${nationalHpNumberList}"
+														th:value="${oneData.cd}" th:text="|${oneData.cd}|"></option>
+											</select> -
+											<input type="text" class="w100" id="recipMiddleNo" name="recipMiddleNo" maxlength="4" required="required" data-valid-type="numeric"
+												   data-valid-name="휴대전화번호"/> -
+											<input type="text" class="w100" id="recipLastNo" name="recipLastNo" maxlength="4" required="required" data-valid-type="numeric"
+												   data-valid-name="휴대전화번호"/>
+										</td>
+									</tr>
+									<tr>
+										<th>주소<i class="star"></i></th>
+										<td colspan="5">
+											<input type="text" id="recipZipNo" name="recipZipNo" class="w100" maxlength="10" required="required" data-valid-name="주소"/>
+											<button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custAddrForm');">우편번호찾기</button>
+											<br/>
+											<input type="text" id="recipBaseAddr" name="recipBaseAddr" class="w300" maxlength="50" required="required" data-valid-name="주소"/>
+											<input type="text" id="recipDtlAddr" name="recipDtlAddr" class="w300" maxlength="30" required="required" data-valid-name="상세주소"/>
+										</td>
+									</tr>
+									</tbody>
+								</table>
+								<ul class="panelBar">
+									<li class="right">
+										<button type="button" class="btn btn-info btn-lg" id="btnCustAddrNew">신규</button>
+										<button type="button" class="btn btn-success btn-lg" id="btnCustAddrSave">저장</button>
+									</li>
+								</ul>
+							</form>
 						</div>
-						<ul class="panelBar">
-							<li class="right">
-								<button type="button" class="btn btn-info btn-lg" id="btnCustAddrNew">신규</button>
-								<button type="button" class="btn btn-success btn-lg" id="btnCustAddrSave">저장</button>
-							</li>
-						</ul>
-						<table class="frmStyle">
-							<colgroup>
-								<col style="width:5%;"/>
-								<col style="width:25%;"/>
-								<col style="width:5%;"/>
-								<col style="width:25%;"/>
-								<col style="width:5%;"/>
-								<col style="width:25%;"/>
-								<col/>
-							</colgroup>
-							<tbody>
-							<tr>
-								<th>배송지명<i class="star"></i></th>
-								<td>
-									<input type="text" class="w200" name="delvAddrNm" maxlength="30" required="required" data-valid-name="배송지명"/>
-									<label><input type="checkbox" name="defaultYn" value="Y"/>기본</label>
-								</td>
-
-								<th>이메일</th>
-								<td>
-									<input type="text" class="w200" name="recipEmail" maxlength="50" data-valid-type="email" data-valid-name="이메일"/>
-								</td>
-
-								<th>삭제여부</th>
-								<td>
-									<label><input type="checkbox" name="delYn" value="Y"/></label>
-								</td>
-							</tr>
-							<tr>
-								<th>수령인<i class="star"></i></th>
-								<td>
-									<input type="text" class="w200" name="recipNm" maxlength="10" required="required" data-valid-name="수령인"/>
-								</td>
-
-								<th>전화번호</th>
-								<td>
-									<input type="text" class="w100" name="recipTelno1" maxlength="4" data-valid-type="numeric"
-										   data-valid-name="전화번호"/> -
-									<input type="text" class="w100" name="recipTelno2" maxlength="4" data-valid-type="numeric"
-										   data-valid-name="전화번호"/> -
-									<input type="text" class="w100" name="recipTelno3" maxlength="4" data-valid-type="numeric"
-										   data-valid-name="전화번호"/>
-								</td>
-								<th>휴대전화번호<i class="star"></i></th>
-								<td>
-									<input type="text" class="w100" name="recipPhnno1" maxlength="4" required="required" data-valid-type="numeric"
-										   data-valid-name="휴대전화번호"/> -
-									<input type="text" class="w100" name="recipPhnno2" maxlength="4" required="required" data-valid-type="numeric"
-										   data-valid-name="휴대전화번호"/> -
-									<input type="text" class="w100" name="recipPhnno3" maxlength="4" required="required" data-valid-type="numeric"
-										   data-valid-name="휴대전화번호"/>
-								</td>
-							</tr>
-							<tr>
-								<th>주소<i class="star"></i></th>
-								<td colspan="5">
-									<input type="text" name="recipPostNo" class="w100" maxlength="10" required="required" data-valid-name="주소"/>
-									<button type="button" class="btn btn-info btn-lg" onclick="fnOpenDaumAddr('custAddr');">우편번호찾기</button>
-									<br/>
-									<input type="text" name="recipBaseAddr" class="w300" maxlength="50" required="required" data-valid-name="주소"/>
-									<input type="text" name="recipDtlAddr" class="w300" maxlength="30" required="required" data-valid-name="상세주소"/>
-								</td>
-							</tr>
-							</tbody>
-						</table>
 						<!-- //TAB3 PANELSTYLE -->
 					</li>
 					<!-- //TAB3 : 배송지정보 -->
@@ -538,8 +551,8 @@
 				return gagaAgGrid.toDateTimeFormat(params.value);
 			}
 		},
-		{headerName: "주문자전화번호", field: "orderTelno", width: 120, cellClass: 'text-center'},
-		{headerName: "주문자휴대폰", field: "orderPhnno", width: 130, cellClass: 'text-center'},
+		{headerName: "주문자전화번호", field: "ordTelno", width: 120, cellClass: 'text-center'},
+		{headerName: "주문자휴대폰", field: "ordPhnno", width: 130, cellClass: 'text-center'},
 		{
 			headerName: "주문상세상태", field: "ordDtlStat", width: 100, cellClass: 'text-center',
 			valueFormatter: function (params) {
@@ -553,11 +566,11 @@
 				return '<a href="javascript:void(0);">' + params.value + '</a>';
 			}
 		},
-		{headerName: "사이즈", field: "sizeCd", width: 100, cellClass: 'text-center'},
+		{headerName: "색상", field: "optCd1", width: 100, cellClass: 'text-center'},
+		{headerName: "사이즈", field: "optCd2", width: 100, cellClass: 'text-center'},
 		{headerName: "상품명", field: "goodsNm", width: 250, cellClass: 'text-left'},
 		{headerName: "주문수량", field: "ordQty", width: 100, cellClass: 'text-center'},
 		{headerName: "판매상품가격", field: "currPrice", width: 100, cellClass: 'text-center'},
-		{headerName: "총 판매 상품가격", field: "totCurrPrice", width: 150, cellClass: 'text-center'}
 	];
 
 	// 1:1문의 내역 그리드
@@ -649,7 +662,7 @@
 			}
 		},
 		{headerName: "쿠폰발행 상세사유", field: "pubReasonDtl", width: 300, cellClass: 'text-center'},
-		{headerName: "등록자", field: "regId", width: 100, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{
 			headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function (params) {
@@ -772,8 +785,7 @@
 		{headerName: "수령자", field: "recipNm", width: 100, cellClass: 'text-center'},
 		{headerName: "전화번호", field: "recipTelno", width: 130, cellClass: 'text-center'},
 		{headerName: "휴대전화번호", field: "recipPhnno", width: 130, cellClass: 'text-center'},
-		{headerName: "이메일", field: "recipEmail", width: 150, cellClass: 'text-center'},
-		{headerName: "우편번호", field: "recipPostNo", width: 100, cellClass: 'text-center'},
+		{headerName: "우편번호", field: "recipZipNo", width: 100, cellClass: 'text-center'},
 		{headerName: "기본주소", field: "recipBaseAddr", width: 300, cellClass: 'text-left'},
 		{headerName: "상세주소", field: "recipDtlAddr", width: 150, cellClass: 'text-left'},
 		{
@@ -783,7 +795,7 @@
 			}
 		},
 		{headerName: "삭제", field: "delYn", width: 50, cellClass: 'text-center'},
-		{headerName: "수정자", field: "updId", width: 100, cellClass: 'text-center'},
+		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
 		{
 			headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function (params) {
@@ -829,111 +841,134 @@
 
 	gridCouponOptions.rowSelection = 'multiple';
 
-	// 비밀번호 초기화 버튼
+	// 기본정보 - 비밀번호 초기화 버튼
 	$('#btnResetPassword').on('click', function () {
 
-		//이메일
-		let email = $('#email1').val() + '@' + $('#email2').val();
-
-		if (!fnCheckValidationEmail(email)) {
+		if (!fnCheckValidationEmail('#custInfoForm')) {
 			return false;
 		}
-		
-		let customer = {};
-		customer.custNo = custNo;
 
 		mcxDialog.confirm("초기화 하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function () {
-				let jsonData = JSON.stringify(customer);
+				let jsonData = JSON.stringify($('#custInfoForm').serializeObject());
 				gagajf.ajaxJsonSubmit('/customer/password/reset', jsonData, fnSearchCustInfo);
 			}
 		});
 
 	});
 
-	// LMS발송 버튼
+	// 기본정보 - LMS발송 버튼
 	$('#btnCustSendLms').on('click', function () {
+
+		if (!fnCheckValidationPhnno('#custInfoForm')) {
+			return false;
+		}
+
 		let param = {};
-		param.elementCellPhnno = '#cellPhnno';
-		param.elementCustNo = '#custNo';
+		param.elementCellPhnno = '#custInfoForm input[name=cellPhnno]';
+		param.elementCustNo = '#custInfoForm input[name=custNo]';
+
 		cfnOpenLmsPopup(param);
 	});
 
 
-	// 이메일발송 버튼
+	// 기본정보 - 이메일발송 버튼
 	$('#btnCustSendEmail').on('click', function () {
+
+		if (!fnCheckValidationEmail('#custInfoForm')) {
+			return false;
+		}
+
 		let param = {};
-		param.elementRecipEmail = '#email';
-		param.elementCustNm = '#custNm';
-		param.elementCustNo = '#custNo';
+		param.elementEmail = '#custInfoForm input[name=email]';
+		param.elementCustNo ='#custInfoForm input[name=custNo]';
+
 		cfnOpenEmailPopup(param);
 	});
 
-	// 이메일 도메인 선택 이벤트
-	$('#emailDomain').on('change', function () {
+	// 기본정보 - 이메일 도메인 선택 이벤트
+	$('#emailDomainList').on('change', function () {
 		let domain = $(this).val();
-		let $email2 = $('#email2');
+		let $emailDomain = $('#emailDomain');
 
 		if (domain === '99') {  //기타(직접입력)
-			$email2.val('');
+			$emailDomain.val('');
 		} else if (domain !== '99' && !gagajf.isNull(domain)) {
-			$email2.val(domain);
+			$emailDomain.val(domain);
 		}
 
 	});
 
-	// 저장 버튼
+	// 기본정보 - 저장버튼
 	$('#btnCustInfoSave').on('click', function () {
-
-		let cellPhnno = $('#cellPhnno1').val() + '-' + $('#cellPhnno2').val() + '-' + $('#cellPhnno3').val();
-		let email = $('#email1').val() + '@' + $('#email2').val();
+		let custInfoFrom = '#custInfoForm';
 
 		//휴대폰번호
-		if (!fnCheckValidationPhnno(cellPhnno))
+		if (!fnCheckValidationPhnno(custInfoFrom))
 			return false;
 
 		//이메일
-		if (!fnCheckValidationEmail(email))
+		if (!fnCheckValidationEmail(custInfoFrom))
 			return false;
 
-
 		let managedRsn = $('#managedRsn').val();
 		let	managedDtlRsn = $('#managedDtlRsn').val();
 
-
 		if (!gagajf.isNull(managedRsn) && gagajf.isNull(managedDtlRsn)) {
 			mcxDialog.alert("관리대상 지정 사유를 입력해주세요");
 			return;
 		}
 
-		let customer = {};
-		customer.custNo = custNo;
-		customer.managedRsn = managedRsn;
-		customer.managedDtlRsn = managedDtlRsn;
-		customer.email = email;
-		customer.custGb = $('#custGb').val();
-		customer.custGrade = $('#custGrade').val();
-		customer.birthYmd = $('#birthYmd').val();
-		customer.homePostNo = $('#homePostNo').val();
-		customer.homeBaseAddr = $('#homeBaseAddr').val();
-		customer.homeDtlAddr = $('#homeDtlAddr').val();
-		customer.emailAgreeYn = $('input:radio[name=emailAgreeYn]:checked').val();
-		customer.smsAgreeYn = $('input:radio[name=smsAgreeYn]:checked').val();
-
-
 		mcxDialog.confirm("기본정보를 수정 하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function () {
-				let jsonData = JSON.stringify(customer);
+				let jsonData = JSON.stringify($(custInfoFrom).serializeObject());
 				//console.log(jsonData);
 				gagajf.ajaxJsonSubmit('/customer/info/save', jsonData, fnSearchCustInfo);
 			}
 		});
 	});
 
+	// 배송지정보 - 신규버튼
+	$('#btnCustAddrNew').on('click', function () {
+		$('#custAddrForm')[0].reset();
+		$('#custAddrForm input[name=custDelvAddrSq]').val('');
+		$('#custAddrForm input[name=recipPhnno]').val('');
+		$('#custAddrForm input[name=recipTelno]').val('');
+	});
+
+	// 배송지정보 - 저장버튼
+	$('#btnCustAddrSave').on('click', function () {
+		if (!gagajf.validation('#custAddrForm'))
+			return false;
+
+		// 전화번호
+		let telFirstNo = $('#custAddrForm select[name=telFirstNo]').val();
+		let telMiddleNo = $('#custAddrForm input[name=telMiddleNo]').val();
+		let telLastNo = $('#custAddrForm input[name=telLastNo]').val();
+		$('#custAddrForm input[name=recipTelno]').val(telFirstNo + '-' + telMiddleNo + '-' + telLastNo);
+
+		// 핸드폰번호 필수값 validation 함수에서 null 체크
+		let recipFirstNo = $('#custAddrForm select[name=recipFirstNo]').val();
+		let recipMiddleNo = $('#custAddrForm input[name=recipMiddleNo]').val();
+		let recipLastNo = $('#custAddrForm input[name=recipLastNo]').val();
+		$('#custAddrForm input[name=recipPhnno]').val(recipFirstNo + '-' + recipMiddleNo + '-' + recipLastNo);
+
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function () {
+				gagajf.removeCommaAtNumberFormattedInput('#custAddrForm');
+				let jsonData = JSON.stringify($('#custAddrForm').serializeObject());
+				gagajf.ajaxJsonSubmit('/customer/delivery/addr/save', jsonData, fnSearchDelivery);
+			}
+		});
+
+	});
+
 	// 쿠폰삭제 버튼
 	$('#btnCustCouponDelete').on('click', function () {
 		let removedData = gagaAgGrid.removeRowData(gridCouponOptions);
@@ -971,45 +1006,7 @@
 		cfnCpnPubForCustPopup();
 	});
 
-	// 배송지정보 신규
-	$('#btnCustAddrNew').on('click', function () {
-		$('#custAddr')[0].reset();
-		$('#custAddr input[name=custDelvAddrSq]').val('');
-		$('#custAddr input[name=recipPhnno]').val('');
-		$('#custAddr input[name=recipTelno]').val('');
-	});
-
-	// 배송지정보 저장
-	$('#btnCustAddrSave').on('click', function () {
-
-		if (!gagajf.validation('#custAddr'))
-			return false;
-
-		// 전화번호
-		let recipTelno1 = $('#custAddr input[name=recipTelno1]').val();
-		let recipTelno2 = $('#custAddr input[name=recipTelno2]').val();
-		let recipTelno3 = $('#custAddr input[name=recipTelno3]').val();
-
-		$('#custAddr input[name=recipTelno]').val(recipTelno1 + '-' + recipTelno2 + '-' + recipTelno3);
-
-
-		// 핸드폰번호 필수값 validation 함수에서 null 체크
-		let recipPhnno1 = $('#custAddr input[name=recipPhnno1]').val();
-		let recipPhnno2 = $('#custAddr input[name=recipPhnno2]').val();
-		let recipPhnno3 = $('#custAddr input[name=recipPhnno3]').val();
-		$('#custAddr input[name=recipPhnno]').val(recipPhnno1 + '-' + recipPhnno2 + '-' + recipPhnno3);
-
-		mcxDialog.confirm("저장하시겠습니까?", {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function () {
-				gagajf.removeCommaAtNumberFormattedInput('#custAddr');
-				let jsonData = JSON.stringify($('#custAddr').serializeObject());
-				gagajf.ajaxJsonSubmit('/customer/delivery/addr/save', jsonData, fnSearchDelivery);
-			}
-		});
 
-	});
 
 	// 회원접촉이력 저장
 	$('#btnSaveContact').on('click', function () {
@@ -1068,34 +1065,33 @@
 			return;
 
 		if (!gagajf.isNull(event.data)) {
-			$('#custAddr input[name=custDelvAddrSq]').val(event.data.custDelvAddrSq);
-			$('#custAddr input[name=delvAddrNm]').val(event.data.delvAddrNm);
-			$('#custAddr input[name=recipEmail]').val(event.data.recipEmail);
-			$('#custAddr input[name=recipNm]').val(event.data.recipNm);
+			$('#custAddrForm input[name=custDelvAddrSq]').val(event.data.custDelvAddrSq);
+			$('#custAddrForm input[name=delvAddrNm]').val(event.data.delvAddrNm);
+			$('#custAddrForm input[name=recipNm]').val(event.data.recipNm);
 
 			if (!gagajf.isNull(event.data.recipPhnno)) {
-				let recipPhnno = event.data.recipPhnno.split("-");
-				$('#custAddr input[name=recipPhnno1]').val(recipPhnno[0]);
-				$('#custAddr input[name=recipPhnno2]').val(recipPhnno[1]);
-				$('#custAddr input[name=recipPhnno3]').val(recipPhnno[2]);
+				let phnNoSplit = event.data.recipPhnno.split("-");
+				$('#custAddrForm select[name=recipFirstNo]').val(phnNoSplit[0]);
+				$('#custAddrForm input[name=recipMiddleNo]').val(phnNoSplit[1]);
+				$('#custAddrForm input[name=recipLastNo]').val(phnNoSplit[2]);
 			}
 
 			if (!gagajf.isNull(event.data.recipTelno)) {
-				let recipTelno = event.data.recipTelno.split("-");
-				$('#custAddr input[name=recipTelno1]').val(recipTelno[0]);
-				$('#custAddr input[name=recipTelno2]').val(recipTelno[1]);
-				$('#custAddr input[name=recipTelno3]').val(recipTelno[2]);
+				let telNoSplit = event.data.recipTelno.split("-");
+				$('#custAddrForm select[name=telFirstNo]').val(telNoSplit[0]);
+				$('#custAddrForm input[name=telMiddleNo]').val(telNoSplit[1]);
+				$('#custAddrForm input[name=telLastNo]').val(telNoSplit[2]);
 			}
 
-			$('#custAddr input[name=recipPostNo]').val(event.data.recipPostNo);
-			$('#custAddr input[name=recipBaseAddr]').val(event.data.recipBaseAddr);
-			$('#custAddr input[name=recipDtlAddr]').val(event.data.recipDtlAddr);
+			$('#custAddrForm input[name=recipZipNo]').val(event.data.recipZipNo);
+			$('#custAddrForm input[name=recipBaseAddr]').val(event.data.recipBaseAddr);
+			$('#custAddrForm input[name=recipDtlAddr]').val(event.data.recipDtlAddr);
 
 			let defaultYn = event.data.defaultYn === 'Y' ? true : false;
 			let delYn = event.data.delYn === 'Y' ? true : false;
 
-			$('#custAddr input:checkbox[name=defaultYn]').prop('checked', defaultYn);
-			$('#custAddr input:checkbox[name=delYn]').prop('checked', delYn);
+			$('#custAddrForm input:checkbox[name=defaultYn]').prop('checked', defaultYn);
+			$('#custAddrForm input:checkbox[name=delYn]').prop('checked', delYn);
 
 		}
 	};
@@ -1105,7 +1101,7 @@
 		$.get('/customer/info/' + custNo
 			, function (data) {
 				if (!gagajf.isNull(data)) {
-					$('#custNm').text(data.maskingCustNm);
+					$('#spanCustNm').text(data.maskingCustNm);
 					$('#custId').text(data.maskingCustId);
 					$('#siteNm').text(gagaAgGrid.lookupValue(siteList, data.siteCd));
 					$('#custGrade').val(data.custGrade);
@@ -1127,7 +1123,7 @@
 					let snsType = fnGetSnsType(data.nvJoinId, data.kkJoinId, data.ysJoinId);
 					$('#snsType').text(snsType);
 
-					$('#homePostNo').val(data.homePostNo);
+					$('#homeZipNo').val(data.homeZipNo);
 					$('#homeBaseAddr').val(data.homeBaseAddr);
 					$('#homeDtlAddr').val(data.homeDtlAddr);
 					$('#sexGb').text(gagaAgGrid.lookupValue(genderGbList, data.sexGb));
@@ -1136,7 +1132,7 @@
 					fnDisplaySmsAgree(data.smsAgreeYn);				// SMS 수신여부
 					fnDisplayEmail(data.maskingEmail);				// EMAIL
 					fnDisplayCellPhnno(data.maskingCellPhnno);		// 핸드폰
-					fnDisplayManaged(data.managedRsnNm);			// 관리대상
+					fnDisplayManaged(data.managedRsn);			// 관리대상
 
 					//기존데이트 저장
 					orgData = data;
@@ -1218,15 +1214,16 @@
 		let daumZip = new daum.Postcode({
 			oncomplete: function(data) {
 				// 우편번호와 주소 정보를 해당 필드에 넣는다.
-				if (id === 'custInfo') {
-					$('#homePostNo').val(data.zonecode);
+				if (id === 'custInfoForm') {
+					$('#homeZipNo').val(data.zonecode);
 					$('#homeBaseAddr').val(cfnGetDaumRoadAddr(data));
 					$('#homeDtlAddr').focus();
 				}
 
-				if (id === 'custAddr') {
-					$('#recipPostNo').val(data.zonecode);
+				if (id === 'custAddrForm') {
+					$('#recipZipNo').val(data.zonecode);
 					$('#recipBaseAddr').val(cfnGetDaumRoadAddr(data));
+					$('#recipDtlAddr').focus();
 				}
 
 				cfnCloseDaumAddr();
@@ -1237,36 +1234,31 @@
 		cfnOpenDaumAddr(daumZip);
 	}
 
-	// 휴대전화 유효성체크
-	var fnCheckValidationPhnno = function (cellPhnno) {
+	// 휴대전화 유효성 체크 및 데이터 셋팅
+	var fnCheckValidationPhnno = function (formId) {
 		let result = true;
-		let regexp = /^(01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4})$/ ;
-
-		if (!regexp.test(cellPhnno)) {
-			mcxDialog.alertC('휴대전화의 형식이 잘못되었습니다.', {
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					$('#cellPhnno1').select();
-					$('#cellPhnno1').focus();
-				}
-			});
+
+		let firstNo = $(formId + ' select[name=firstNo]').val();
+		let middleNo = $(formId + ' input[name=middleNo]').val();
+		let lastNo = $(formId + ' input[name=lastNo]').val();
+		let cellPhnno = firstNo + '-' + middleNo + '-' + lastNo;
+		$(formId + ' input[name=cellPhnno]').val(cellPhnno);
+
+		if (!gagajf.testRegexp($(formId + ' input[name=cellPhnno]'), /^(01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4})$/)) {
 			result = false;
 		}
+
 		return result;
 	};
 
-	// 이메일 체크
-	var fnCheckValidationEmail = function (email) {
+	// 이메일 체크 및 데이터 셋팅
+	var fnCheckValidationEmail = function (formId) {
 		let result = true;
-		let regexp = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/;
+		let emailId = $(formId + ' input[name=emailId]').val();
+		let emailDomain = $(formId + ' input[name=emailDomain]').val();
+		$(formId + ' input[name=email]').val(emailId + '@' + emailDomain);
 
-		if (!regexp.test(email)) {
-			mcxDialog.alertC('이메일 형식이 잘못되었습니다.', {
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					$('#email1').focus();
-				}
-			});
+		if (!gagajf.testRegexp($(formId + ' input[name=email]'), /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/)) {
 			result = false;
 		}
 
@@ -1299,15 +1291,14 @@
 	};
 
 	// 관리대상
-	var fnDisplayManaged = function (managedRsnNm) {
+	var fnDisplayManaged = function (managedRsn) {
 		const $managedRsnNm = $('#managedRsnNm');
 		const $managedRsnDp = $('#managedRsnDp');
-
 		$managedRsnNm.text('');
 		$managedRsnNm.hide();
 		$managedRsnDp.text('');
 		$managedRsnDp.hide();
-		if (!gagajf.isNull(managedRsnNm)) {
+		if (!gagajf.isNull(managedRsn)) {
 			let html = '<i class="fa fa-info-circle"></i>';
 			$managedRsnNm.html(html);
 			$managedRsnNm.show();
@@ -1317,12 +1308,11 @@
 
 	};
 
-
 	// 탈퇴여부
 	var fnGetSecedeRsnYn = function (custStat, secedeRsn) {
 		let secedeRsnYn = gagajf.isNull(secedeRsn) ? '아니요' : '예';
 		if (custStat === '10') {
-			secedeRsnYn += '<button type="button" class="btn btn-danger btn-lg marL5"onClick="fnCustomerSecede();">';
+			secedeRsnYn += '<button type="button" class="btn btn-danger btn-lg marL5" onClick="fnCustomerSecede();">';
 			secedeRsnYn += ' 회원탈퇴';
 			secedeRsnYn += '</button>';
 		}
@@ -1333,9 +1323,9 @@
 	var fnDisplayCellPhnno = function (cellPhnno) {
 		if (!gagajf.isNull(cellPhnno)) {
 			let cellPhSplit = cellPhnno.split("-");
-			$('#cellPhnno1').val(cellPhSplit[0]);
-			$('#cellPhnno2').val(cellPhSplit[1]);
-			$('#cellPhnno3').val(cellPhSplit[2]);
+			$('#firstNo').val(cellPhSplit[0]);
+			$('#middleNo').val(cellPhSplit[1]);
+			$('#lastNo').val(cellPhSplit[2]);
 		}
 	};
 
@@ -1343,8 +1333,8 @@
 	var fnDisplayEmail = function (email) {
 		if (!gagajf.isNull(email)) {
 			let emailSplit = email.split("@");
-			$('#email1').val(emailSplit[0]);
-			$('#email2').val(emailSplit[1]);
+			$('#emailId').val(emailSplit[0]);
+			$('#emailDomain').val(emailSplit[1]);
 		}
 	};
 
@@ -1394,6 +1384,18 @@
 		return snsType;
 	};
 
+	// 생년월일 달력 설정
+	var fnDisplayBirthYmd = function () {
+		const $birthYmd = $('#birthYmd');
+		let currentYear = new Date().format('YYYY');
+		$birthYmd.datepicker("destroy");
+		$birthYmd.datepicker({
+			changeMonth: true,
+			changeYear: true,
+			yearRange: (currentYear - 100) + ' : ' + (currentYear - 14),
+			defaultDate: $birthYmd.val()
+		});
+	}
 
 	$('#btnLogin').on('click', function () {
 		let custId = $('span[name=custId]').text();
@@ -1404,19 +1406,10 @@
 	})
 
 	$(document).ready(function () {
-		// 생년월일 달력 설정
-		const $birthYmd = $('#birthYmd');
-		let currentYear = new Date().format('YYYY');
-		$birthYmd.datepicker("destroy");
-		$birthYmd.datepicker({
-			changeMonth: true,
-			changeYear: true,
-			yearRange: (currentYear - 100) + ' : ' + (currentYear - 14),
-			defaultDate: $birthYmd.val()
-		});
 
-		//회원정보 조회
-		fnSearchCustInfo();
+		fnDisplayBirthYmd(); //생년월일 달력 설정
+
+		fnSearchCustInfo();	//회원정보 조회
 
 		gagaAgGrid.createGrid('custOrderList', gridOrderOptions);		// 주문내역
 

+ 148 - 0
src/main/webapp/WEB-INF/views/customer/EmailPopupForm.html

@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : EmailPopupForm.html
+ * @desc    : 메일발송팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.21   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" id="popupEmailForm" data-width="800">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong >메일 발송</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupEmailForm')"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		<!-- CONTENT -->
+		<div class="panelContent">
+			<div class="tabs">
+				<!-- TABS CONTENT -->
+				<ul class="tabsCont">
+					<li class="tab on" id="tab1">
+						<div class="panelStyle">
+							<form id="emailForm" name="emailForm">
+								<input type="hidden" name="sendEmail" th:value="${sendEmail}"/>
+								<input type="hidden" name="email"/>
+								<table class="frmStyle">
+									<colgroup>
+										<col style="width:1%"/>
+										<col style="width:40%"/>
+									</colgroup>
+									<tbody>
+									<tr >
+										<th>보내는사람</th>
+										<td>
+											<span name="sendEmail" th:text="${sendEmail}"></span>
+										</td>
+									</tr>
+									<tr>
+										<th>받는사람</th>
+										<td>
+											<span name="email"></span>
+										</td>
+									</tr>
+									<tr>
+										<th>제목<em class="star"></em></th>
+										<td>
+											<input type="text" class="w150" name="title" value="" required="required" data-valid-name="제목"/>
+										</td>
+									</tr>
+									<tr>
+										<th>내용<em class="star"></em></th>
+										<td>
+											<textarea class="textareaR4" style="resize: none;" name ="content" ></textarea>
+										</td>
+									</tr>
+									</tbody>
+								</table>
+							</form>
+						</div>
+					</li>
+				</ul>
+				<!-- //TABS CONTENT -->
+			</div>
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-success btn-lg" id="btnSendEmail">발송</button>
+					<button type="button" class="btn btn-gray btn-lg" onclick="uifnPopupClose('popupEmailForm')">취소</button>
+				</li>
+			</ul>
+		</div>
+		<!-- //CONTENT -->
+	</div>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	const elementEmail = [[${elementEmail}]];
+	const elementCustNo = [[${elementCustNo}]];
+
+	// 메시지 전송
+	$("#btnSendEmail").on("click",function() {
+		let formId = '#emailForm';
+		let $content = $(formId+' textarea[name=content]');
+		let $email = $(formId+' input[name=email]');
+
+
+		if(gagajf.isNull($content.val())) {
+			mcxDialog.alertC("내용을 입력해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$content.focus();
+				}
+			});
+			return;
+		}
+
+		if(gagajf.isNull($email.val())) {
+			mcxDialog.alertC("수신메일을 입력해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$email.focus();
+				}
+			});
+			return;
+		}
+
+		if(!gagajf.validation(formId)){
+			return;
+		}
+
+		mcxDialog.confirm("메일을 발송하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = $(formId).serializeObject();
+				params.custNo = $(elementCustNo).val();
+				let jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/customer/email/send', jsonData, uifnPopupClose('popupEmailForm'));
+			}
+		});
+
+	});
+
+	// 데이터 셋팅
+	var fnInitDataSet = function () {
+		let email = $(elementEmail).val();
+
+		if(!gagajf.isNull(email)) {
+			$('#emailForm input[name=email]').val(email);
+			$('#emailForm span[name=email]').text(email);
+		}
+	}
+
+	$(document).ready(function() {
+		fnInitDataSet();
+	});
+
+	/*]]>*/
+</script>
+</html>

+ 141 - 0
src/main/webapp/WEB-INF/views/customer/LmsPopupForm.html

@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html lang="ko"
+	  xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : LmsPopupForm.html
+ * @desc    : 메시지발송팝업 Page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.21   jsshin     최초 작성
+ *******************************************************************************
+ -->
+<div class="modelessPopup draggable" data-width="634">
+	<div class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>LMS 발송</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupLmsForm')"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //TITLE -->
+		<!-- CONTENT -->
+		<div class="panelContent">
+			<div class="tabs">
+				<div class="tabsNav">
+					<ul >
+						<li class="on"><a href="#tab1">LMS 발송</a></li>
+					</ul>
+				</div>
+				<!-- //TABS NAVI -->
+				<!-- TABS CONTENT -->
+				<ul class="tabsCont">
+					<!-- LMS 발송 -->
+					<li class="tab on" id="tab1">
+						<div class="panelStyle">
+							<form id="lmsForm" name="lmsForm">
+								<table class="frmStyle">
+									<colgroup>
+										<col style="width:1%"/>
+										<col style="width:40%"/>
+									</colgroup>
+									<tbody>
+									<tr >
+										<th>수신자번호 <em class="star"></em></th>
+										<td>
+											<input type="text" class="w150" name="cellPhnno" data-valid-name="수신번호"  required="required"  maxlength="13"/>
+										</td>
+									</tr>
+									<tr>
+										<th>발신자번호<em class="star"></em></th>
+										<td>
+											<input type="text" class="w150" name="callBack" th:value="${callBack}" maxlength="11" readonly="readonly"/>
+										</td>
+									<tr>
+										<th>메시지<em class="star"></em></th>
+										<td>
+											<textarea class="textareaR4"  style="resize: none;" name ="content" ></textarea>
+											<span name="count">0</span> / 2000 byte
+										</td>
+									</tr>
+									</tr>
+									</tbody>
+								</table>
+							</form>
+						</div>
+					</li>
+					<!-- //LMS발송 -->
+				</ul>
+				<!-- //TAB CONTENT -->
+			</div>
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-success btn-lg" id="btnSendSms">발송</button>
+					<button type="button" class="btn btn-gray btn-lg" onclick="uifnPopupClose('popupLmsForm')">취소</button>
+				</li>
+			</ul>
+		</div>
+		<!-- //CONTENT -->
+	</div>
+</div>
+<script th:inline="javascript">
+	/*<![CDATA[*/
+	const elementCellPhnno = [[${elementCellPhnno}]];
+	const elementCustNo = [[${elementCustNo}]];
+
+	// 메시지 전송
+	$("#btnSendSms").on("click",function() {
+		let formId = '#lmsForm';
+		let custNo = $(elementCustNo).val();
+		const $content = $(formId+' textarea[name=content]');
+
+		if(gagajf.isNull($content.val())) {
+			mcxDialog.alertC("보낼 메시지를 입력해 주세요.", {
+				sureBtnText: "확인",
+				sureBtnClick: function() {
+					$content.focus();
+				}
+			});
+			return;
+		}
+
+		if(!gagajf.validation(formId)){
+			return;
+		}
+
+		mcxDialog.confirm("저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				let params = $(formId).serializeObject();
+				params.custNo = custNo;
+				let jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/customer/message/send', jsonData, uifnPopupClose('popupLmsForm'));
+			}
+		});
+
+	});
+
+	// LMS 글자수 변경 이벤트
+	$("#lmsForm textarea[name=content]").bind('focus focusout input keyup keydown paste change', function () {
+		cfnGetTextLength($(this), 2000, $('#lmsForm span[name=count]'));
+	});
+
+	var fnInitDataSet = function () {
+		let cellPhnno = $(elementCellPhnno).val();
+		if(!gagajf.isNull(cellPhnno)) {
+			$('#lmsForm input[name=cellPhnno]').val(cellPhnno);
+		}
+	}
+
+	$(document).ready(function() {
+		fnInitDataSet();
+
+		cfnGetTextLength("#lmsForm textarea[name=content]", 2000, $('#lmsForm span[name=count]'));
+	});
+	/*]]>*/
+</script>
+</html>

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

@@ -192,7 +192,7 @@
 			},
 			{headerName: "사용 수/발급 수 ", field: "useIssueCnt", width: 140, cellClass: 'text-center',
 				cellRenderer: function(params) {
-					return params.data.issueCnt.addComma() + "/" + params.data.useCnt.addComma();
+					return params.data.useCnt.addComma() + "/" + params.data.issueCnt.addComma();
 				}
 			},
 			{headerName: "기간/일수구분", field: "pdGb", width: 140, cellClass: 'text-center' ,

+ 43 - 25
src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html

@@ -597,6 +597,9 @@
 			sureBtnText:"확인",
 			sureBtnClick: function () {
 				gagajf.removeCommaAtNumberFormattedInput('#CouponForm');
+				// disabled 해제
+				$("#CouponForm * ").attr("readonly" , false);
+				$("#CouponForm * ").prop("disabled" , false);
 				// 필수값들 셋팅
 				setReqValue();
 				// 필수값 validation 체크
@@ -605,17 +608,17 @@
 				}
 				checkValidation();
 
-				$("#CouponForm input[name=cpnId]").prop("disabled", false);
-				$("#CouponForm input[name=cpnId]").attr("required", true);
-				$("#CouponForm input[name=cpnId]").attr("placeholder", "");
-				$("#CouponForm input[name=cpnId]").attr("readonly", false);
-
 				gagajf.ajaxFormSubmit($('#CouponForm').prop('action'), '#CouponForm', function() {
 					uifnPopupClose('CouponRegForm');
 					$('#btnSearch').trigger('click');
 				});
 			}
 		});
+	}
+	// disabled 해제
+	function setDisabledFalse(){ debugger;
+
+
 	}
 
 	function checkValidation(){
@@ -1163,8 +1166,14 @@
 		$('#CouponForm #downStdt').val($('#CouponForm #downStDay').val() + " " + $('#CouponForm #downStHH').val() + ":" + $('#CouponForm #downStMM').val() + ":00");
 		$('#CouponForm #downEddt').val($('#CouponForm #downEdDay').val() + " " + $('#CouponForm #downEdHH').val() + ":" + $('#CouponForm #downEdMM').val() + ":59");
 		// 유효기간 세팅
-		$('#CouponForm #availStdt').val($('#CouponForm #availStDay').val() + " " + $('#CouponForm #availStHH').val() + ":" + $('#CouponForm #availStMM').val() + ":00");
-		$('#CouponForm #availEddt').val($('#CouponForm #availEdDay').val() + " " + $('#CouponForm #availEdHH').val() + ":" + $('#CouponForm #availEdMM').val() + ":59");
+		if($("#CouponForm #pdGb").val() == 'P') {
+			$('#CouponForm #availStdt').val($('#CouponForm #availStDay').val() + " " + $('#CouponForm #availStHH').val() + ":" + $('#CouponForm #availStMM').val() + ":00");
+			$('#CouponForm #availEddt').val($('#CouponForm #availEdDay').val() + " " + $('#CouponForm #availEdHH').val() + ":" + $('#CouponForm #availEdMM').val() + ":59");
+			$('#CouponForm #availDays').val('');
+		} else {
+			$('#CouponForm #availStdt').val('');
+			$('#CouponForm #availEddt').val('');
+		}
 		// 첫구매기간세팅
 		$('#CouponForm #buyStdt').val($('#CouponForm #buyStDay').val() + " " + $('#CouponForm #buyStHH').val() + ":" + $('#CouponForm #buyStMM').val() + ":00");
 		$('#CouponForm #buyEddt').val($('#CouponForm #buyEdDay').val() + " " + $('#CouponForm #buyEdHH').val() + ":" + $('#CouponForm #buyEdMM').val() + ":59");
@@ -1326,36 +1335,45 @@
 			if (cpnDetail.pdGb == "P") {
 				splitDate("start", cpnDetail.availStdt, "avail");
 				splitDate("end", cpnDetail.availEddt, "avail");
-				$("#CouponForm #availStDay").attr('readonly', true);
-				$("#CouponForm #availStDay").attr('disabled', true);
-				$("#CouponForm #availStHH").attr('readonly', true);
-				$("#CouponForm #availStHH").attr('disabled', true);
-				$("#CouponForm #availStMM").attr('readonly', true);
-				$("#CouponForm #availStMM").attr('disabled', true);
+				if(issueCnt > 0) {
+					$("#CouponForm #availStDay").attr('readonly', true);
+					$("#CouponForm #availStDay").attr('disabled', true);
+					$("#CouponForm #availStHH").attr('readonly', true);
+					$("#CouponForm #availStHH").attr('disabled', true);
+					$("#CouponForm #availStMM").attr('readonly', true);
+					$("#CouponForm #availStMM").attr('disabled', true);
+				}
 			} else {
 				$("#CouponForm #availDays").val(cpnDetail.availDays);
+				$('#CouponForm #availEdHH option:last').attr("selected", "selected");
+				$('#CouponForm #availEdMM option:last').attr("selected", "selected");
+
 			}
 			// 첫구매여부 적용하는 경우 날짜 세팅
 			if (cpnDetail.firstYn == "Y") {
 				splitDate("start", cpnDetail.buyStdt, "buy");
 				splitDate("end", cpnDetail.buyEddt, "buy");
-				$("#CouponForm #buyStDay").attr('readonly', true);
-				$("#CouponForm #buyStDay").attr('disabled', true);
-				$("#CouponForm #buyStHH").attr('readonly', true);
-				$("#CouponForm #buyStHH").attr('disabled', true);
-				$("#CouponForm #buyStMM").attr('readonly', true);
-				$("#CouponForm #buyStMM").attr('disabled', true);
+				if(issueCnt > 0) {
+					$("#CouponForm #buyStDay").attr('readonly', true);
+					$("#CouponForm #buyStDay").attr('disabled', true);
+					$("#CouponForm #buyStHH").attr('readonly', true);
+					$("#CouponForm #buyStHH").attr('disabled', true);
+					$("#CouponForm #buyStMM").attr('readonly', true);
+					$("#CouponForm #buyStMM").attr('disabled', true);
+				}
 			}
 			// 신규회원여부 적용하는 경우 날짜 세팅
 			if (cpnDetail.custJoinYn == "Y") {
 				splitDate("start", cpnDetail.custJoinStdt, "custJoin");
 				splitDate("end", cpnDetail.custJoinEddt, "custJoin");
-				$("#CouponForm #custJoinStDay").attr('readonly', true);
-				$("#CouponForm #custJoinStDay").attr('disabled', true);
-				$("#CouponForm #custJoinStHH").attr('readonly', true);
-				$("#CouponForm #custJoinStHH").attr('disabled', true);
-				$("#CouponForm #custJoinStMM").attr('readonly', true);
-				$("#CouponForm #custJoinStMM").attr('disabled', true);
+				if(issueCnt > 0) {
+					$("#CouponForm #custJoinStDay").attr('readonly', true);
+					$("#CouponForm #custJoinStDay").attr('disabled', true);
+					$("#CouponForm #custJoinStHH").attr('readonly', true);
+					$("#CouponForm #custJoinStHH").attr('disabled', true);
+					$("#CouponForm #custJoinStMM").attr('readonly', true);
+					$("#CouponForm #custJoinStMM").attr('disabled', true);
+				}
 			}
 		}
 		// 기본세팅

+ 29 - 27
src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html

@@ -29,6 +29,8 @@
 			<input type="hidden" name="exceptGoodsList"/>			<!-- 제외상품 리스트 -->
 			<input type="hidden" name="burdenList"/>				<!-- 업체 분담율 리스트 -->
 			<input type="hidden" name="sectionGbList"/>				<!-- 다다익선 구간/혜택 리스트 -->
+			<input type="hidden" name="supplyCompArr"/>
+			<input type="hidden" name="brandArr"/>
 
 			<div class="panelContent">
 				<table class="frmStyle">
@@ -519,8 +521,34 @@
 		});
 	});
 
-	// 저장 버튼 클릭시
 	$('#btnMorebetterSave').on('click', function() {
+		var allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
+		var allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+
+		// 공급업체+브랜드 상품조회
+		var multiSupplyCompCd = [];
+		$.each(allSupplyCompData, function(idx, item) {
+			multiSupplyCompCd.push(item.supplyCompCd);
+		});
+
+		var multiBrand = [];
+		$.each(allBrandData, function(idx, item) {
+			multiBrand.push(item.brandCd);
+		});
+
+		$('#moreBetterForm input[name=supplyCompArr]').val(multiSupplyCompCd.join(','));
+		$('#moreBetterForm input[name=brandArr]').val(multiBrand.join(','));
+
+		var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
+		gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
+			fnMorebetterFormClose();
+			$('#btnInit').trigger('click');
+			$('#btnSearch').trigger('click');
+		});
+	});
+
+	// 저장 버튼 클릭시
+	$('#btnMorebetterSave2').on('click', function() {
 		// validation
 		if (!gagajf.validation('#moreBetterForm'))
 			return false;
@@ -665,36 +693,10 @@
 		var allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
 		var allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
 
-		console.log('allSupplyCompData cnt>>'+allSupplyCompData.length);
-		console.log('allBrandData cnt>>'+allBrandData.length);
-
 		if(allSupplyCompData.length < 1){
 			mcxDialog.alert('공급업체를 추가해주세요.');
 			return;
 		}
-
-		// 공급업체+브랜드 상품조회
-		var multiSupplyCompCd = [];
-		$.each(allSupplyCompData, function(idx, item) {
-			multiSupplyCompCd.push(item.supplyCompCd);
-		});
-
-		var multiBrand = [];
-		$.each(allBrandData, function(idx, item) {
-			multiBrand.push(item.brandCd);
-		});
-
-		var data = {multiSupplyCompCd : multiSupplyCompCd
-			,multiBrand : multiBrand
-			,pageingYn : "N"
-		};
-
-		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/goods/list', jsonData, function(result) {
-			console.log('goodsList cnt>>'+result.goodsList.length);
-			console.log('goodsList >>'+result.goodsList);
-		});
-
 	};
 
 	// 분담업체율 설정 / 업체 추가 콜백함수

+ 1 - 1
src/main/webapp/dx5/module/dextuploadx5-application-api.js

@@ -1,4 +1,4 @@
-/*
+/*
  * DEXTUploadX5 - Application
  * http://www.dextsolution.com
  *

+ 9 - 8
src/main/webapp/ux/js/admin.popup.js

@@ -398,8 +398,7 @@ function cfnCouponCreatePopup(cpnId, callbackfun){
  * @author : jsshin
  */
 var cfnOpenLmsPopup = function(param, division) {
-	var actionUrl = '/customer/lms/popup/form?elementContent=' + encodeURIComponent(param.elementContent)
-			+ '&elementCellPhnno=' + encodeURIComponent(param.elementCellPhnno)
+	var actionUrl = '/customer/lms/popup/form?elementCellPhnno=' + encodeURIComponent(param.elementCellPhnno)
 			+ '&elementCustNo=' + encodeURIComponent(param.elementCustNo)
 			+ '&division=' + division;
 	cfnOpenModalPopup(actionUrl, 'popupLmsForm');
@@ -420,8 +419,7 @@ var cfnOpenLmsPopup = function(param, division) {
  * @author : jsshin
  */
 var cfnOpenEmailPopup = function(param, division) {
-	var actionUrl = '/customer/email/popup/form?elementRecipEmail=' + encodeURIComponent(param.elementRecipEmail)
-	+ '&elementCustNm=' + encodeURIComponent(param.elementCustNm)
+	var actionUrl = '/customer/email/popup/form?elementEmail=' + encodeURIComponent(param.elementEmail)
 	+ '&elementCustNo=' + encodeURIComponent(param.elementCustNo);
 	+ '&division=' + division;
 	cfnOpenModalPopup(actionUrl, 'popupEmailForm');
@@ -736,19 +734,22 @@ var cfnOpenFreeGoodsPromotionSetPopup = function(gbn, freegiftSq) {
  *     or
  *     cfnOpenCompanyListPopup('fnResult', 'S', 'TBJ');							// 1번 파라미터 : callBack 함수, 2번 파라미터 : 선택구분, 3번 파라미터 : 팝업 default 검색어
  *     or
- *     cfnOpenCompanyListPopup('fnResult', 'S', 'TBJ', 'inputId');				// 마지막 문자열은 멀티구분 S이고, 결과가 하나일때 supplyCompCd값을 넣어줄 html tag id, S가 아니고, inputId가 존재하지 않으면 무조건 팝업이 열림.
+ *     cfnOpenCompanyListPopup('fnResult', 'S', 'TBJ', 'inputId');				// 문자열은 멀티구분 S이고, 결과가 하나일때 supplyCompCd값을 넣어줄 html tag id, S가 아니고, inputId가 존재하지 않으면 무조건 팝업이 열림.
+ *     or
+ *     cfnOpenCompanyListPopup('fnResult', 'S', 'TBJ', 'inputId', 'Y');			// '': 전체 공급업체(기본값), Y: 자사공급업체, N:입점공급업체
+ *     
  * </pre>
  * @since  : 2020/12/23
  * @author : xodud1202
  */
-var cfnOpenCompanyListPopup = function(callbackfn, multiGb, searchTxt, inputId) {
+var cfnOpenCompanyListPopup = function(callbackfn, multiGb, searchTxt, inputId, selfYn) {
 	var actionUrl = "/business/comapny/search/form?callbackFn=" + callbackfn;
 	if (typeof(multiGb) != 'undefined' && multiGb != null && multiGb == "M") actionUrl += "&multiGb=" + multiGb; else actionUrl += "&multiGb=S";
 	if (typeof(searchTxt) != 'undefined') actionUrl += "&searchTxt=" + encodeURIComponent(searchTxt);
-
+	if (typeof(selfYn) != 'undefined') actionUrl += "&selfYn="+ selfYn ; else actionUrl += "&selfYn=" ;
 	if(multiGb == "S") {
 		if(searchTxt && searchTxt != "" && inputId && inputId != "") {
-			var data = {  searchTxt : searchTxt, searchGb : "NAME"	};
+			var data = {  searchTxt : searchTxt, searchGb : "NAME"};
 			var jsonData = JSON.stringify(data);
 
 			gagajf.ajaxJsonSubmit('/business/supply/company/list', jsonData, function(result) {