浏览代码

Merge branch 'develop' of http://112.172.147.34:4936/style24/style24.admin.git into develop

jsh77b 5 年之前
父节点
当前提交
d392e73a8c
共有 45 个文件被更改,包括 2802 次插入833 次删除
  1. 2 2
      pom.xml
  2. 16 0
      src/main/java/com/style24/admin/biz/dao/TsaBusinessDao.java
  3. 18 0
      src/main/java/com/style24/admin/biz/dao/TsaCouponDao.java
  4. 135 6
      src/main/java/com/style24/admin/biz/dao/TsaCustomerDao.java
  5. 9 0
      src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java
  6. 37 1
      src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java
  7. 35 0
      src/main/java/com/style24/admin/biz/service/TsaBusinessService.java
  8. 19 1
      src/main/java/com/style24/admin/biz/service/TsaCouponService.java
  9. 167 1
      src/main/java/com/style24/admin/biz/service/TsaCustomerService.java
  10. 29 71
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  11. 40 30
      src/main/java/com/style24/admin/biz/service/TsaKakaoService.java
  12. 31 4
      src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java
  13. 15 1
      src/main/java/com/style24/admin/biz/web/TsaBusinessController.java
  14. 370 11
      src/main/java/com/style24/admin/biz/web/TsaCustomerController.java
  15. 7 7
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  16. 29 2
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  17. 27 0
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  18. 33 2
      src/main/java/com/style24/admin/support/security/TsaAuthenticationProvider.java
  19. 8 3
      src/main/java/com/style24/persistence/domain/Brand.java
  20. 1 0
      src/main/java/com/style24/persistence/domain/CustCoupon.java
  21. 13 19
      src/main/java/com/style24/persistence/domain/Delivery.java
  22. 0 2
      src/main/java/com/style24/persistence/domain/GoodsNotiInfo.java
  23. 1 1
      src/main/java/com/style24/persistence/domain/GoodsPriceRes.java
  24. 9 0
      src/main/java/com/style24/persistence/domain/MoreBetter.java
  25. 10 0
      src/main/java/com/style24/persistence/domain/MoreBetterGoods.java
  26. 0 2
      src/main/java/com/style24/persistence/domain/NotiInfo.java
  27. 51 17
      src/main/java/com/style24/persistence/mybatis/shop/TsaBusiness.xml
  28. 86 24
      src/main/java/com/style24/persistence/mybatis/shop/TsaCoupon.xml
  29. 421 7
      src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml
  30. 104 6
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  31. 59 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  32. 1 0
      src/main/resources/i18n/messages/message_ko_KR.properties
  33. 二进制
      src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.2-RELEASE.jar
  34. 二进制
      src/main/webapp/WEB-INF/lib/gagaframework-web-util-1.7-RELEASE.jar
  35. 112 57
      src/main/webapp/WEB-INF/views/business/BrandForm.html
  36. 1 1
      src/main/webapp/WEB-INF/views/business/SupplyCompanyPopupForm.html
  37. 382 355
      src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html
  38. 148 0
      src/main/webapp/WEB-INF/views/customer/EmailPopupForm.html
  39. 141 0
      src/main/webapp/WEB-INF/views/customer/LmsPopupForm.html
  40. 1 1
      src/main/webapp/WEB-INF/views/marketing/CouponListForm.html
  41. 43 25
      src/main/webapp/WEB-INF/views/marketing/CouponPopupForm.html
  42. 37 27
      src/main/webapp/WEB-INF/views/marketing/MorebetterPopupForm.html
  43. 144 138
      src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html
  44. 1 1
      src/main/webapp/dx5/module/dextuploadx5-application-api.js
  45. 9 8
      src/main/webapp/ux/js/admin.popup.js

+ 2 - 2
pom.xml

@@ -76,9 +76,9 @@
 		<dependency>
 			<groupId>com.gagaframework</groupId>
 			<artifactId>gagaframework-web-security</artifactId>
-			<version>1.7.1-RELEASE</version>
+			<version>1.7.2-RELEASE</version>
 			<scope>system</scope>
-			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.1-RELEASE.jar</systemPath>
+			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.2-RELEASE.jar</systemPath>
 		</dependency>
 		<dependency>
 			<groupId>com.gagaframework</groupId>

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

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

@@ -1,11 +1,22 @@
 package com.style24.admin.biz.dao;
 
 import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.Counsel;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.CustContactHst;
+import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
+import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.Review;
+
 import org.springframework.stereotype.Repository;
 
 import java.util.Collection;
+import java.util.concurrent.CompletionException;
 
 /**
  * 회원 Dao
@@ -22,7 +33,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 +42,141 @@ 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 custNo -고객일련번호
+	 * @return Collection<Coupon>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Point> getCustomerPointList(Integer custNo);
+
+	/**
+	 * 회원상세-상품권내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<GiftCard>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<GiftCard> getCustomerGiftCardList(Integer custNo);
+
+	/**
+	 * 회원상세-상품평내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Review>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Review> getCustomerReviewList(Integer custNo);
+
+	/**
+	 * 회원상세- 1:1문의 내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Counsel> getCustomerCounselList(Integer custNo);
+
+	/**
+	 * 회원상세- 상품문의 내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<Counsel> getCustomerGoodsQnaList(Integer custNo);
+
+	/**
+	 * 회원상세- 등급변경 내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<CustGrade> getCustomerChangeGradeList(Integer custNo);
+
+	/**
+	 * 회원상세- 접촉내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	Collection<CustContactHst> getCustomerContactList(Integer custNo);
+
 	/**
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
 	 * @return Collection<Customer>
 	 * @author jsshin
-	 * @since 2020. 01. 14
+	 * @since 2021. 01. 14
 	 */
 	Collection<Customer> getCustomerSecedeList(CustomerSearch customerSearch);
 
@@ -57,10 +185,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();
 
+
 }

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

@@ -1120,4 +1120,13 @@ public interface TsaGoodsDao {
 	 */
 	GoodsNotiInfo getNotiClsfColumnInfo(String niClsfCd);
 
+	/**
+	 * 상품 품목별 매핑 카테고리 저장
+	 *
+	 * @param goods
+	 * @author eskim
+	 * @since 2021. 01. 24
+	 */
+	void createCategoryGoods(Goods goods);
+
 }

+ 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(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 조회 insert
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    void createTmtbGoodsTemp(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 중복 상품 조회
+     * @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);
+				}
+			}
+		}
 	}
 
 	/**

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

@@ -4,8 +4,18 @@ 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.Counsel;
+import com.style24.persistence.domain.Coupon;
+import com.style24.persistence.domain.CustContactHst;
+import com.style24.persistence.domain.CustGrade;
 import com.style24.persistence.domain.Customer;
 import com.style24.persistence.domain.CustomerSearch;
+import com.style24.persistence.domain.Delivery;
+import com.style24.persistence.domain.GiftCard;
+import com.style24.persistence.domain.Order;
+import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.Review;
+
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -47,7 +57,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 +89,161 @@ 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 custNo -고객일련번호
+	 * @return Collection<Coupon>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Point> getCustomerPointList(Integer custNo) {
+		return customerDao.getCustomerPointList(custNo);
+	}
+
+	/**
+	 * 회원상세-상품권내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<GiftCard>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<GiftCard> getCustomerGiftCardList(Integer custNo) {
+		return customerDao.getCustomerGiftCardList(custNo);
+	}
+
+	/**
+	 * 회원상세-상품평내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Review>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Review> getCustomerReviewList(Integer custNo) {
+		return customerDao.getCustomerReviewList(custNo);
+	}
+
+	/**
+	 * 회원상세- 1:1문의 내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Counsel> getCustomerCounselList(Integer custNo) {
+		return customerDao.getCustomerCounselList(custNo);
+	}
+
+	/**
+	 * 회원상세- 상품문의 내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<Counsel> getCustomerGoodsQnaList(Integer custNo) {
+		return customerDao.getCustomerGoodsQnaList(custNo);
+	}
+
+	/**
+	 * 회원상세- 등급변경 내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<CustGrade> getCustomerChangeGradeList(Integer custNo) {
+		return customerDao.getCustomerChangeGradeList(custNo);
+	}
+
+	/**
+	 * 회원상세- 접촉내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	public Collection<CustContactHst> getCustomerContactList(Integer custNo) {
+		return customerDao.getCustomerContactList(custNo);
+	}
+
+	/**
+	 * 회원상세-회원접촉이력 생성
+	 *
+	 * @param custContactHst -고객정보
+	 * @return void
+	 * @author jsshin
+	 * @since 2021. 01. 25
+	 */
+	@Transactional("shopTxnManager")
+	public void createCustomerContactHistory(CustContactHst custContactHst) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		custContactHst.setRegNo(userNo);
+		custContactHst.setUpdNo(userNo);
+		custContactHst.setSenderNo(userNo);
+		custContactHst.setReceiverNo(custContactHst.getCustNo());
+		coreCustomerService.createCustomerContactHistory(custContactHst);
+	}
+
 	/**
 	 * 탈퇴회원 목록
 	 * @param customerSearch - 검색조건
@@ -102,4 +267,5 @@ public class TsaCustomerService {
 	}
 
 
+
 }

+ 29 - 71
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -24,6 +24,7 @@ import com.style24.persistence.domain.Brand;
 import com.style24.persistence.domain.Color;
 import com.style24.persistence.domain.FreeGoods;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.GoodsCategory;
 import com.style24.persistence.domain.GoodsCompose;
 import com.style24.persistence.domain.GoodsDesc;
 import com.style24.persistence.domain.GoodsEpSkip;
@@ -88,10 +89,10 @@ public class TsaGoodsService {
 	private TsaCommonService commonService;
 
 	@Autowired
-	private TsaRendererService rendererService;
+	private TsaNoticeService noticeService;
 
 	@Autowired
-	private TsaNoticeService noticeService;
+	private TsaDisplayService displayService;
 
 	@Autowired
 	private SafetyKoreaApi safetyKoreaApi;
@@ -228,8 +229,9 @@ public class TsaGoodsService {
 	 */
 	@Transactional("shopTxnManager")
 	public void saveNotiInfoItem(Collection<NotiInfo> notiInfoList) {
-		if (notiInfoList == null || notiInfoList.isEmpty())
+		if (notiInfoList == null || notiInfoList.isEmpty()) {
 			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
 
 		for (NotiInfo notiInfo : notiInfoList) {
 			if (!StringUtils.isBlank(notiInfo.getNiContent())) {
@@ -871,72 +873,29 @@ public class TsaGoodsService {
 			}
 			goodsDao.updateGoodsSnm(goods);
 
-			Collection<GoodsNotiInfo> goodsNotiInfoList = goodsDao.getNewNotiInfo(goods);
-			goodsDao.deleteGoodsNotiInfo(goods);
+			//상품 등록후에는 고시정보는 품목과 상관없이 변경처리 가능하게 
+//			Collection<GoodsNotiInfo> goodsNotiInfoList = goodsDao.getNewNotiInfo(goods);
+//			goodsDao.deleteGoodsNotiInfo(goods);
+//
+//			for (GoodsNotiInfo goodsNotiInfo : goodsNotiInfoList) {
+//				goodsNotiInfo.setRegNo(TsaSession.getInfo().getUserNo());
+//				goodsNotiInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+//				goodsNotiInfo.setGoodsCd(goods.getGoodsCd());
+//				goodsDao.saveGoodsNotiInfo(goodsNotiInfo);
+//			}
 
-			for (GoodsNotiInfo goodsNotiInfo : goodsNotiInfoList) {
-				goodsNotiInfo.setRegNo(TsaSession.getInfo().getUserNo());
-				goodsNotiInfo.setUpdNo(TsaSession.getInfo().getUserNo());
-				goodsNotiInfo.setGoodsCd(goods.getGoodsCd());
-				goodsDao.saveGoodsNotiInfo(goodsNotiInfo);
-			}
+			// 품목변경시 카테고리 전시카테고리 변경
+			GoodsCategory goodsCategory = new GoodsCategory();
+			goodsCategory.setRegNo(TsaSession.getInfo().getUserNo());
+			goodsCategory.setUpdNo(TsaSession.getInfo().getUserNo());
+			goodsCategory.setGoodsCd(goods.getGoodsCd());
+			goodsCategory.setCateType("G031_10");	//상품분류카테고리
+			displayService.deleteGoodsCategory(goodsCategory);
+			goodsDao.createCategoryGoods(goods);
 
-			this.saveGoodsCategory(goods);
 		}
 	}
 
-	/**
-	 * 상품 품목 기준 카테고리 저장
-	 *
-	 * @param goods
-	 * @author eskim
-	 * @since 2020. 4. 21.
-	 */
-	private void saveGoodsCategory(Goods goods) {
-
-//		GoodsCategory goodsCategory = new GoodsCategory();
-//		goodsCategory.setRegNo(TsaSession.getInfo().getUserNo());
-//		goodsCategory.setUpdNo(TsaSession.getInfo().getUserNo());
-//		goodsCategory.setGoodsCd(goods.getGoodsCd());
-//		displayService.deleteGoodsCategory(goodsCategory);
-//
-//		Collection<ItemkindCategory> itemkindCategoryList = displayService.getItemkindCategoryList(goods.getItemkindCd());
-//		for ItemkindCategory itemkindCategory : itemkindCategoryList) {
-//			Category category = new Category();
-//			category.setCateGb(itemkindCategory.getCateGb());
-//			category.setCateCd(itemkindCategory.getCateCd());
-//			category = displayService.getCategory4srch(category);
-//
-//			CategoryGoods categoryGoods = new CategoryGoods();
-//			categoryGoods.setRegNo(TsaSession.getInfo().getUserNo());
-//			categoryGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-//			String[] goodsCdArr = {goods.getGoodsCd()};
-//			categoryGoods.setGoodsCdArr(goodsCdArr);
-//			if (category.getCateGb() != null) {
-//				categoryGoods.setNcateGb(String.valueOf(category.getCateGb()));
-//			}
-//			if (category.getCateType() != null) {
-//				categoryGoods.setNcateType(String.valueOf(category.getCateType()));
-//			}
-//			if (category.getCateCd() != null) {
-//				categoryGoods.setNcateCd(String.valueOf(category.getCateCd()));
-//			}
-//			if (category.getTcateCd() != null) {
-//				categoryGoods.setNtcateCd(String.valueOf(category.getTcateCd()));
-//			}
-//			if (category.getMcateCd() != null) {
-//				categoryGoods.setNmcateCd(String.valueOf(category.getMcateCd()));
-//			}
-//			if (category.getScateCd() != null) {
-//				categoryGoods.setNscateCd(String.valueOf(category.getScateCd()));
-//			}
-//			if (category.getDcateCd() != null) {
-//				categoryGoods.setNdcateCd(String.valueOf(category.getDcateCd()));
-//			}
-//			displayService.moveCategoryGoods(categoryGoods);
-//		}
-	}
-
 	/**
 	 * 상품 저장
 	 *
@@ -1501,7 +1460,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 +1471,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 +2259,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 +2266,7 @@ public class TsaGoodsService {
 			}
 
 			// 판매수수료율 변경
-			if (goodsPriceRes.getSellFeeRate() != null) {
+			if (Float.compare(goodsPriceRes.getSellFeeRate(), 0) > 0) {
 				goods.setSellFeeRate(goodsPriceRes.getSellFeeRate());
 				goodsDao.updateSellFeeRate(goods);
 			}
@@ -2491,8 +2448,9 @@ public class TsaGoodsService {
 
 			int idx = 0;
 			for (AdKeywordGoods adKeywordGoods : adKeywordGoodsList) {
-				if (idx == 0)
+				if (idx == 0) {
 					goodsDao.deleteAdKeywordGoods(adKeywordGoods); // 전체 상품 삭제
+				}
 				adKeywordGoods.setAdKeywordSq(adKeyword.getAdKeywordSq());
 				adKeywordGoods.setRegNo(TsaSession.getInfo().getUserNo());
 				adKeywordGoods.setUpdNo(TsaSession.getInfo().getUserNo());

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

@@ -59,12 +59,51 @@ public class TsaKakaoService {
 			custContactHst.setContactContents("고객 임시비밀번호 발송");
 			custContactHst.setReceiverNo(customer.getCustNo());
 			custContactHst.setSenderNo(userNo);
+			custContactHst.setRegNo(userNo);
+			custContactHst.setUpdNo(userNo);
 			coreCustomerService.createCustomerContactHistory(custContactHst);
 		} catch (Exception e) {
 			log.error("error", e);
 			// 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 {
+			// 고객접촉이력 정보
+			Integer userNo = TsaSession.getInfo().getUserNo();
+			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(userNo);
+			custContactHst.setRegNo(userNo);
+			custContactHst.setUpdNo(userNo);
+			coreCustomerService.createCustomerContactHistory(custContactHst);
+		} catch (Exception e) {
+			log.error("error", e);
+			// Do nothing
+		}
+	}
+
 //
 //	/**
 //	 * 일대일문의 답변 알림톡 발송
@@ -213,35 +252,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
-//		}
-//	}
+
 
 }

+ 31 - 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,32 @@ public class TsaMorebetterService {
             morebetterDao.deleteTmtbBurdenList(moreBetterBurden);
         }
     }
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 TMEP 테이블 생성
+     * @param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 22
+     */
+    @Transactional("shopTxnManager")
+    public void createMorebetterGoodsTemp(MoreBetterGoods moreBetterGoods){
+        moreBetterGoods.setRegNo(TsaSession.getInfo().getUserNo());
+
+        morebetterDao.deleteTmtbGoodsTemp(moreBetterGoods);
+        morebetterDao.createTmtbGoodsTemp(moreBetterGoods);
+    }
+
+    /**
+     * 다다익선 - 진행중인 다다익선 상품 조회
+     * @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;

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

@@ -6,10 +6,18 @@ 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.CustContactHst;
+import com.style24.persistence.domain.CustGrade;
 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.GiftCard;
+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 +25,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;
 
@@ -32,6 +41,8 @@ import com.style24.persistence.domain.Counsel;
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.web.rest.server.GagaResponse;
+import com.style24.persistence.domain.Point;
+import com.style24.persistence.domain.Review;
 
 /**
  * 고객 Controller
@@ -259,7 +270,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 +301,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 +315,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();
 
 		// 사이트 목록
@@ -367,6 +378,8 @@ public class TsaCustomerController extends TsaBaseController {
 		// 포인트반영상태
 		mav.addObject("pntUploadStatList", rendererService.getCommonCodeList("G070"));
 
+		// 상품권유형
+		mav.addObject("giftCardOccurGbList", rendererService.getCommonCodeList("G074"));
 
 		mav.addObject("custNo", custNo);
 
@@ -380,11 +393,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 +407,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 +423,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 +439,359 @@ 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);
+	}
+
+	/**
+	 * 회원상세-포인트
+	 *
+	 * @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<Point> getCustomerPointList(@PathVariable Integer custNo) {
+		return customerService.getCustomerPointList(custNo);
+	}
+
+	/**
+	 * 회원상세-1:1문의내역
+	 *
+	 * @param custNo -고객일련번호
+	 * @return Collection<Counsel>
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@GetMapping("/giftcard/list/{custNo}")
+	@ResponseBody
+	public Collection<GiftCard> getCustomerGiftCardList(@PathVariable Integer custNo) {
+		return customerService.getCustomerGiftCardList(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);
+	}
+
+	/**
+	 * 회원상세-상품문의내역
+	 *
+	 * @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);
+	}
+
+	/**
+	 * 회원상세-상품평내역
+	 *
+	 * @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<CustGrade> 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<CustContactHst> getCustomerContactList(@PathVariable Integer custNo) {
+		return customerService.getCustomerContactList(custNo);
+	}
+
+	/**
+	 * 회원상세-회원접촉이력 생성
+	 *
+	 * @param custContactHst -고객정보
+	 * @return GagaResponse
+	 * @author jsshin
+	 * @since 2021. 01. 21
+	 */
+	@PostMapping("/contact/create")
+	@ResponseBody
+	public GagaResponse createCustomerContactHistory(@RequestBody CustContactHst custContactHst) {
+		customerService.createCustomerContactHistory(custContactHst);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
+
 	/**
 	 * 탈퇴회원
 	 * @return ModelAndView

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

@@ -627,11 +627,9 @@ public class TsaGoodsController extends TsaBaseController {
 						returnGoods += tmpGoods.getGoodsCd() + ",";
 					} else {
 						for (GoodsNotiInfo tmpGoodsNotiInfo : goodsNotiInfoList) {
-							if ("Y".equals(tmpGoodsNotiInfo.getReqYn()) || "Y".equals(tmpGoodsNotiInfo.getDispYn())) {
-								if (StringUtils.isBlank(tmpGoodsNotiInfo.getNiContent())) {
-									returnGoods += tmpGoods.getGoodsCd() + ",";
-									break;
-								}
+							if (StringUtils.isBlank(tmpGoodsNotiInfo.getNiContent())) {
+								returnGoods += tmpGoods.getGoodsCd() + ",";
+								break;
 							}
 						}
 					}
@@ -1005,8 +1003,9 @@ public class TsaGoodsController extends TsaBaseController {
 	@RequestMapping(value = "/thumbnail/image/save", method = RequestMethod.POST)
 	@ResponseBody
 	public GagaResponse saveGoodsThumbnailImageList(@RequestBody Collection<GoodsImg> goodsImgList) throws Exception {
-		if (goodsImgList == null || goodsImgList.isEmpty())
+		if (goodsImgList == null || goodsImgList.isEmpty()) {
 			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
 
 		String dextUploadPath = env.getProperty("upload.dext.target.path");
 		String goodsTargetPath = env.getProperty("upload.goods.target.path");
@@ -1029,8 +1028,9 @@ public class TsaGoodsController extends TsaBaseController {
 				Goods goods = new Goods();
 				goods.setGoodsCd(goodsImg.getGoodsCd());
 				Goods goodsInfo = goodsService.getGoods(goods);
-				if (goodsInfo == null || goodsInfo.getGoodsCd().isEmpty())
+				if (goodsInfo == null || goodsInfo.getGoodsCd().isEmpty()) {
 					throw new IllegalStateException(message.getMessage("FAIL_1001"));
+				}
 
 				strBrandNo = String.valueOf(goodsInfo.getBrandNo());
 			}

+ 29 - 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,35 @@ 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(",");
+		String[] multiGoods = moreBetter.getGoodsArr().split(",");
+
+		MoreBetterGoods moreBetterGoods = new MoreBetterGoods();
+
+		moreBetterGoods.setMultiSupplyCompCd(multiSupplyCompCd);
+		moreBetterGoods.setMultiBrand(multiBrand);
+		moreBetterGoods.setMultiGoods(multiGoods);
+		log.info("[saveMorebetterDetail moreBetterGoods]{}",moreBetterGoods);
+
+		// TMTB_GOODS_TEMP TABLE TRUNCATE -> 다른 다다에서 사용중인 상품 조회 -> INSERT
+		morebetterService.createMorebetterGoodsTemp(moreBetterGoods);
+		//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"));
 	}
 

+ 27 - 0
src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java

@@ -16,6 +16,7 @@ import org.springframework.web.servlet.ModelAndView;
 
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
+import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.admin.biz.service.TsaDeliveryService;
 import com.style24.admin.biz.service.TsaOrderChangeService;
 import com.style24.admin.biz.service.TsaOrderService;
@@ -469,6 +470,32 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		return mav;
 	}
+
+	/**
+	 * 교환신청 (관리자)
+	 *
+	 * @param Collection<OrderChange>
+	 * @return
+	 * @author card007
+	 * @since 2021. 01. 22
+	 */
+	@PostMapping("/exchangeRequest")
+	@ResponseBody
+	public GagaMap orderExchangeRequest(@RequestBody OrderChange excReq) {
+		GagaMap result = new GagaMap();
+		result.set("status", GagaResponseStatus.FAIL.getCode());
+
+		if (excReq == null) {
+			result.set("message", message.getMessage("FAIL_1001"));
+			return result;
+		}
+
+		log.info("excReq >>> {}", excReq);
+		// orderChangeService.changeRequest()
+		// result.set("status", GagaResponseStatus.SUCCESS.getCode());
+
+		return result;
+	}
 }
 
 

+ 33 - 2
src/main/java/com/style24/admin/support/security/TsaAuthenticationProvider.java

@@ -3,6 +3,7 @@ package com.style24.admin.support.security;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationProvider;
 import org.springframework.security.authentication.BadCredentialsException;
@@ -13,13 +14,13 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority;
 import org.springframework.stereotype.Component;
 
 import com.style24.admin.biz.service.TsaLoginService;
+import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.User;
 
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.web.security.GagaPasswordEncoder;
-import com.gagaframework.web.util.GagaCryptoUtil;
 
 /**
  * 로그인 인증 처리
@@ -60,7 +61,6 @@ public class TsaAuthenticationProvider implements AuthenticationProvider {
 			throw new BadCredentialsException(message.getMessage("LOGN_0005"));
 		}
 
-		log.info("encoded password: {}", GagaCryptoUtil.encryptSha512(passwd));
 		boolean isMatch = passwordEncoder.matches(passwd, loginInfo.getPasswd());
 		log.info("isMatch: {}", isMatch);
 
@@ -70,6 +70,11 @@ public class TsaAuthenticationProvider implements AuthenticationProvider {
 			throw new BadCredentialsException(message.getMessage("LOGN_0002"));
 		}
 
+		// IP주소 체크
+		if (!matchIpAddress(loginInfo.getIpChkYn(), loginInfo.getIpAddr())) {
+			throw new BadCredentialsException(message.getMessage("LOGN_0005"));
+		}
+
 		// 권한 설정
 		List<SimpleGrantedAuthority> authorities = new ArrayList<>();
 		authorities.add(new SimpleGrantedAuthority(loginInfo.getRoleCd()));
@@ -87,4 +92,30 @@ public class TsaAuthenticationProvider implements AuthenticationProvider {
 		return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
 	}
 
+	/**
+	 * IP주소 체크
+	 * @param ipChkYn - IP주소체크여부
+	 * @param loginIpAddr - 로그인IP주소
+	 * @return
+	 */
+	private boolean matchIpAddress(String ipChkYn, String loginIpAddr) {
+		String requestIpAddr = TsaSession.getIpAddress();
+
+		log.info("ipChkYn: {}, request ip address: {} vs user's ip address: {}", ipChkYn, requestIpAddr, loginIpAddr);
+
+		if (ipChkYn.equals("N")) {
+			return true;
+		}
+
+		if (!StringUtils.isNotBlank(loginIpAddr)) {
+			return true;
+		}
+
+		if (!loginIpAddr.equals(requestIpAddr)) {
+			return false;
+		}
+
+		return true;
+	}
+
 }

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

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

@@ -20,8 +20,6 @@ public class GoodsNotiInfo extends TscBaseDomain {
 	private String niItemCd;
 	private String niContent;
 	private int dispOrd;
-	private String dispYn;
-	private String reqYn;
 
 	private String niItemNm;
 	private String supplyVendorCd;

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

+ 9 - 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,14 @@ public class MoreBetter extends TscBaseDomain {
 	private String exceptGoodsList;
 	private String burdenList;
 	private String sectionGbList;
+	private String compBrandGoodsList;
+
+	private String supplyCompArr;
+	private String brandArr;
+	private String goodsArr;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrCompBrandGoods;
 
 	// Pagination
 	private TscPageRequest pageable;

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

@@ -40,4 +40,14 @@ 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;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiGoods;
 }

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

@@ -22,8 +22,6 @@ public class NotiInfo extends TscBaseDomain {
 	private String niItemNm;
 	private String niContent;
 	private Integer dispOrd;
-	private String reqYn;
-	private String dispYn;
 
 	private String crud;
 	private String goodsCd;

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

+ 421 - 7
src/main/java/com/style24/persistence/mybatis/shop/TsaCustomer.xml

@@ -20,7 +20,7 @@
 		     , EMAIL
 		     , EMAIL_AGREE_YN
 		     , DATE_FORMAT(EMAIL_AGREE_DT, '%Y%m%d%H%i%S') AS EMAIL_AGREE_DT
-		     , HOME_POST_NO
+		     , HOME_ZIP_NO
 		     , HOME_BASE_ADDR
 		     , HOME_DTL_ADDR
 		     , SITE_CD
@@ -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
@@ -132,7 +132,7 @@
 		     , EMAIL
 		     , EMAIL_AGREE_YN
 		     , DATE_FORMAT(EMAIL_AGREE_DT, '%Y%m%d%H%i%S') AS EMAIL_AGREE_DT
-		     , HOME_POST_NO
+		     , HOME_ZIP_NO
 		     , HOME_BASE_ADDR
 		     , HOME_DTL_ADDR
 		     , SITE_CD
@@ -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,420 @@
 		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 CGH.GFCD_HST_SQ
+		     , CGH.CUST_NO
+		     , CGH.OCCUR_GB
+		     , CGH.OCCUR_DTL_DESC
+		     , CGH.GFCD_AMT
+		     , CGH.CUST_GFCD_SQ
+		     , CGH.ORD_NO
+		     , CGH.ORD_DTL_NO
+		     , CGH.REG_NO
+		     , CGH.REG_DT
+		     , CGH.UPD_NO
+		     , CGH.UPD_DT
+		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
+		INNER  JOIN
+		       TB_CUSTOMER C
+		ON     R.CUST_NO = C.CUST_NO
+		WHERE  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
+		     , FN_GET_USER_NM(CS.ANS_NO) AS ANS_NM
+		     , 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
+		     , FN_GET_USER_NM(CS.ANS_NO) AS ANS_NM
+		     , 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="CustGrade">
+		/* TsaCustomer.getCustomerChangeGradeList */
+		SELECT CGH.CUST_NO
+		     , CGH.APPLY_YMD
+		     , CGH.GRADE_BCD
+		     , CGH.GRADE_ACD
+		     , CGH.REAL_ORD_AMT
+		     , CGH.ORD_CNT
+		     , CGH.REG_NO
+		     , CGH.REG_DT
+		FROM   TB_CUST_GRADE_HST CGH
+		INNER JOIN
+		       TB_CUSTOMER C
+		ON     CGH.CUST_NO = C.CUST_NO
+		WHERE  CGH.CUST_NO = #{custNo}
+	</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 */
@@ -252,7 +666,7 @@
 		     , EMAIL
 		     , EMAIL_AGREE_YN
 		     , DATE_FORMAT(EMAIL_AGREE_DT, '%Y%m%d%H%i%S') AS EMAIL_AGREE_DT
-		     , HOME_POST_NO
+		     , HOME_ZIP_NO
 		     , HOME_BASE_ADDR
 		     , HOME_DTL_ADDR
 		     , SITE_CD
@@ -336,7 +750,7 @@
 		     , EMAIL
 		     , EMAIL_AGREE_YN
 		     , DATE_FORMAT(EMAIL_AGREE_DT, '%Y%m%d%H%i%S') AS EMAIL_AGREE_DT
-		     , HOME_POST_NO
+		     , HOME_ZIP_NO
 		     , HOME_BASE_ADDR
 		     , HOME_DTL_ADDR
 		     , SITE_CD

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

@@ -150,8 +150,6 @@
 		     , FN_GET_CODE_NM('G005', B.NI_ITEM_CD) AS NI_ITEM_NM
 		     , B.NI_CONTENT
 		     , B.DISP_ORD
-		     , B.REQ_YN
-		     , B.DISP_YN
 		FROM TB_NOTI_INFO B
 		WHERE B.SUPPLY_VENDOR_CD = CASE #{supplyVendorCd} 
 		                         WHEN 'SV0001' THEN 'SV0001'
@@ -911,8 +909,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
@@ -950,8 +950,6 @@
 		     , C.NI_ITEM_CD
 		     , C.NI_CONTENT
 		     , C.DISP_ORD
-		     , A.DISP_YN
-		     , A.REQ_YN
 		FROM TB_GOODS_NOTI_INFO C
 		INNER JOIN TB_GOODS B ON C.GOODS_CD = B.GOODS_CD
         INNER JOIN TB_SUPPLY_COMPANY D ON B.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
@@ -984,8 +982,6 @@
 		        END
 		        AS  NI_CONTENT
 		      , N.DISP_ORD
-		      , N.REQ_YN
-		      , N.DISP_YN
 		 FROM (
 		     SELECT G.GOODS_CD
 		         , G.ITEMKIND_CD
@@ -3849,4 +3845,106 @@
 		       ) A
 	</select>
 	
+	<!-- 상품 품목별 매핑 카테고리 저장 (LEAF 상위카테고리까지)-->
+	<insert id="createCategoryGoods_ORG" parameterType="Goods">
+		/* TsaGoods.createCategoryGoods */
+		INSERT INTO TB_CATE_GOODS
+		    (CATE_NO
+		   , GOODS_CD
+		   , DISP_ORD
+		   , REG_NO
+		   , REG_DT
+		    )
+		WITH RECURSIVE TAB_GOODS AS (
+		    SELECT A.GOODS_CD
+		         , A.ITEMKIND_CD
+		         , B.CATE_NO
+		    FROM TB_GOODS A
+		    INNER JOIN TB_ITEMKIND_CATE  B ON A.ITEMKIND_CD = B.ITEMKIND_CD
+		    WHERE A.GOODS_CD = #{goodsCd}
+		)
+		, TAB_4SCRH AS (
+		    SELECT  LEAF_CATE_NO
+		          , CATE1_NO
+		          , CATE2_NO
+		          , CATE3_NO
+		          , CATE4_NO
+		          , CATE5_NO
+		    FROM  TB_CATE_4SRCH
+		    WHERE SITE_CD = 'G000_10'
+		    AND CATE_TYPE = 'G031_10' -- 상품타입
+		)
+		, TAB_CATE AS (
+		    SELECT LEAF_CATE_NO 
+		         , CATE_LVL 
+		         , CATE_NO
+		    FROM (
+		          SELECT LEAF_CATE_NO ,
+		                 CASE WHEN X = 1 THEN 'CATE1_NO'  -- 컬럼과 매핑(컬럼명)
+		                      WHEN X = 2 THEN 'CATE2_NO'
+		                      WHEN X = 3 THEN 'CATE3_NO'
+		                      WHEN X = 4 THEN 'CATE4_NO'
+		                      ELSE  'CATE5_NO' 
+		                 END CATE_LVL,
+		                 CASE WHEN X = 1 THEN CATE1_NO  -- 컬럼과 매핑(컬럼 데이터)
+		                      WHEN X = 2 THEN CATE2_NO
+		                      WHEN X = 3 THEN CATE3_NO
+		                      WHEN X = 4 THEN CATE4_NO
+		                      ELSE  CATE5_NO 
+		                 END CATE_NO
+		          FROM (
+		                 SELECT * FROM TAB_4SCRH A,
+		                 (SELECT 1 AS X                -- UNPIVOT 컬럼 수 만큼 선언
+		                  UNION ALL SELECT 2 AS X
+		                  UNION ALL SELECT 3 AS X
+		                  UNION ALL SELECT 4 AS X
+		                  UNION ALL SELECT 5 AS X
+		                ) B
+		         ) A
+		    ORDER BY LEAF_CATE_NO, CATE_LVL
+		) C
+		WHERE CATE_NO IS NOT NULL
+		)
+		SELECT DISTINCT B.CATE_NO
+		     , A.GOODS_CD
+		     , 9999
+		     , #{regNo}
+		     , NOW()
+		FROM TAB_GOODS A, TAB_CATE B
+		WHERE 1 = 1 
+		AND A.CATE_ NO = B.LEAF_CATE_NO
+		AND NOT EXISTS (SELECT 1
+		                FROM TB_CATE_GOODS
+		                WHERE CATE_NO = B.CATE_NO
+		                AND GOODS_CD = A.GOODS_CD
+		                )
+	</insert>
+	
+	<!-- 상품 품목별 매핑 카테고리 저장 (LEAF CATE에만 상품 적용 )-->
+	<insert id="createCategoryGoods" parameterType="Goods">
+		/* TsaGoods.createCategoryGoods */
+		INSERT INTO TB_CATE_GOODS
+		    (CATE_NO
+		   , GOODS_CD
+		   , DISP_ORD
+		   , REG_NO
+		   , REG_DT
+		    )
+		 SELECT B.CATE_NO
+		      , A.GOODS_CD
+		      , 9999
+		      , #{regNo}
+		      , NOW()
+		FROM TB_GOODS A
+		INNER JOIN TB_ITEMKIND_CATE  B ON A.ITEMKIND_CD = B.ITEMKIND_CD
+		INNER JOIN TB_CATE_4SRCH C ON B.CATE_NO = C.LEAF_CATE_NO
+		                   AND C.SITE_CD = 'G000_10'
+		                   AND C.CATE_TYPE = 'G031_10' -- 상품타입
+		WHERE A.GOODS_CD = #{goodsCd}
+		AND NOT EXISTS (SELECT 1
+		                FROM TB_CATE_GOODS
+		                WHERE CATE_NO = B.CATE_NO
+		                AND GOODS_CD = A.GOODS_CD
+		                )
+	</insert>
 </mapper>

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

@@ -483,5 +483,64 @@
 			</foreach>
 		</if>
 	</delete>
+
+	<delete id="deleteTmtbGoodsTemp" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbGoodsTemp */
+		DELETE FROM TB_TMTB_USING_GOODS_TEMP
+		WHERE	REG_NO = #{regNo}
+	</delete>
+
+	<insert id="createTmtbGoodsTemp" parameterType="MoreBetterGoods">
+		/* TsaMarketing.createTmtbGoodsTemp */
+		INSERT INTO TB_TMTB_USING_GOODS_TEMP
+			SELECT 	#{regNo} AS REG_NO
+			        ,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 IN ('G800_10','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_USING_GOODS_TEMP TMP
+		 WHERE 1=1
+		   AND TMP.REG_NO = #{regNo}
+		   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>
+						<if test="multiGoods != null and multiGoods != ''">
+							AND G.GOODS_CD IN
+							<foreach collection="multiGoods" item="item" index="index"  open="(" close=")" separator=",">
+								#{item}
+							</foreach>
+						</if>
+				)
+	</select>
 	<!--// CSB 진행 -->
 </mapper>

+ 1 - 0
src/main/resources/i18n/messages/message_ko_KR.properties

@@ -30,6 +30,7 @@ LOGN_0001=\uc785\ub825\ud558\uc2e0 \uc815\ubcf4\ub85c \uac00\uc785\ub41c \ub0b4\
 LOGN_0002=\ube44\ubc00\ubc88\ud638\uac00 \uc77c\uce58\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.
 LOGN_0003=\ub85c\uadf8\uc778 \uc0c1\ud0dc\uac00 \uc544\ub2d9\ub2c8\ub2e4. \ub2e4\uc2dc \ub85c\uadf8\uc778 \ud574\uc8fc\uc138\uc694.
 LOGN_0004=\ube44\ubc00\ubc88\ud638\ub97c \ubcc0\uacbd\ud55c \ub0a0\ub85c\ubd80\ud130 3\uac1c\uc6d4\uc774 \uacbd\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.
+LOGN_0005=\uc811\uc18d \uac00\ub2a5\ud55c IP\uc8fc\uc18c\uac00 \uc544\ub2d9\ub2c8\ub2e4.
 
 ##\uc8fc\ubb38
 ORDER_0001=\uc8fc\ubb38\uc815\ubcf4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.

二进制
src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.1-RELEASE.jar → src/main/webapp/WEB-INF/lib/gagaframework-web-security-1.7.2-RELEASE.jar


二进制
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%;"/>

文件差异内容过多而无法显示
+ 382 - 355
src/main/webapp/WEB-INF/views/customer/CustomerDetailForm.html


+ 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);
+				}
 			}
 		}
 		// 기본세팅

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

@@ -29,6 +29,9 @@
 			<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"/>
+			<input type="hidden" name="goodsArr"/>
 
 			<div class="panelContent">
 				<table class="frmStyle">
@@ -519,8 +522,41 @@
 		});
 	});
 
-	// 저장 버튼 클릭시
 	$('#btnMorebetterSave').on('click', function() {
+		var allSupplyCompData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
+		var allBrandData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
+		var allApplyGoodsData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
+
+		// 공급업체+브랜드 상품조회
+		var multiSupplyCompCd = [];
+		$.each(allSupplyCompData, function(idx, item) {
+			multiSupplyCompCd.push(item.supplyCompCd);
+		});
+
+		var multiBrand = [];
+		$.each(allBrandData, function(idx, item) {
+			multiBrand.push(item.brandCd);
+		});
+
+		var multiGoods = [];
+		$.each(allApplyGoodsData, function(idx, item) {
+			multiGoods.push(item.goodsCd);
+		});
+
+		$('#moreBetterForm input[name=supplyCompArr]').val(multiSupplyCompCd.join(','));
+		$('#moreBetterForm input[name=brandArr]').val(multiBrand.join(','));
+		$('#moreBetterForm input[name=goodsArr]').val(multiGoods.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 +701,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);
-		});
-
 	};
 
 	// 분담업체율 설정 / 업체 추가 콜백함수

+ 144 - 138
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -33,7 +33,7 @@
 				<div id="gridDelvCdList" style="width:100%; height: 140px;" class="ag-theme-balham"></div>
 				
 				<div style="text-align:right; padding-bottom:5px; padding-top:5px;">
-					<button type="button" class="btn btn-success" id="fnExchangeRequestSubmit" onclick="fnExchangeRequestSubmit();">요청</button>
+					<button type="button" class="btn btn-success" id="fnExchangeRequestSubmit" onclick="fnExchange()">요청</button>
 				</div>
 				
 				<table class="frmStyle">
@@ -58,8 +58,8 @@
 						<tr>
 							<th>회수방법</th>
 							<td>
-								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onCLick="fnChangeQty()" checked="checked"/>회수요청<span></span></label>
-								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onCLick="fnChangeQty()"/>직접발송<span></span></label>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="W" onclick="fnChangeQty()" checked="checked"/>회수요청<span></span></label>
+								<label class="rdoBtn"><input type="radio" name="wdGb" th:id="wdGb" value="D" onclick="fnChangeQty()"/>직접발송<span></span></label>
 							</td>
 							<th>추가배송비</th>
 							<td id="addDelvFee"></td>
@@ -177,6 +177,7 @@ var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
 var orderDelvAddrInfo		= [[${orderDelvAddrInfo}]];						// 회수지정보
 var addDelvFee				= 0;											// 추가배송비
 var addDelvFeeList			= [];											// 추가배송비정보
+var exchangeRequestList		= [];											// 교환요청목록
 
 var temp1 = true;
 var temp2 = false;
@@ -204,27 +205,27 @@ var columnExchangeReqList = [
 			{headerName: "옵션1"			, field: "optCd1"			, width: 80		, cellClass: 'text-center', hide: temp1},
 			{headerName: "옵션2"			, field: "optCd2"			, width: 80		, cellClass: 'text-center', hide: temp2},
 			{
-				headerName		: "단품수량"		
-				, field			: "itemQty"			
-				, width			: 80		
+				headerName		: "단품수량"
+				, field			: "itemQty"
+				, width			: 80
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "단품금액"		
-				, field			: "itemPrice"			
-				, width			: 80		
+				headerName		: "단품금액"
+				, field			: "itemPrice"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "단품옵션금액"		
-				, field			: "optAddPrice"			
-				, width			: 80		
+				headerName		: "단품옵션금액"
+				, field			: "optAddPrice"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -236,18 +237,18 @@ var columnExchangeReqList = [
 		headerName	: "주문상세수량",
 		children	: [
 			{
-				headerName		: "주문"		
-				, field			: "ordQty"			
-				, width			: 80		
+				headerName		: "주문"
+				, field			: "ordQty"
+				, width			: 80
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "취소/요청"		
-				, field			: "cnclRtnQty"			
-				, width			: 80		
+				headerName		: "취소/요청"
+				, field			: "cnclRtnQty"
+				, width			: 80
 				, cellClass		: 'text-center'
 				, cellRenderer	: function (params) {
 					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
@@ -318,98 +319,98 @@ var columnExchangeReqList = [
 		children	: [
 			{
 				headerName		: "주문"
-				, field			: "ordAmt"			
-				, width			: 80		
+				, field			: "ordAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "취소"		
-				, field			: "cnclRtnAmt"			
-				, width			: 80		
+				headerName		: "취소"
+				, field			: "cnclRtnAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "즉시할인"		
-				, field			: "cpn1DcAmt"			
-				, width			: 80		
+				headerName		: "즉시할인"
+				, field			: "cpn1DcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "다다익선1"		
-				, field			: "tmtb1DcAmt"			
-				, width			: 80		
+				headerName		: "다다익선1"
+				, field			: "tmtb1DcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "다다익선2"		
-				, field			: "tmtb2DcAmt"			
-				, width			: 80		
+				headerName		: "다다익선2"
+				, field			: "tmtb2DcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "상품쿠폰"		
-				, field			: "goodsCpnDcAmt"			
-				, width			: 80		
+				headerName		: "상품쿠폰"
+				, field			: "goodsCpnDcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "장바구니쿠폰"		
-				, field			: "cartCpnDcAmt"			
-				, width			: 80		
+				headerName		: "장바구니쿠폰"
+				, field			: "cartCpnDcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "포인트"		
-				, field			: "pntDcAmt"			
-				, width			: 80		
+				headerName		: "포인트"
+				, field			: "pntDcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "선포인트"		
-				, field			: "prePntDcAmt"			
-				, width			: 80		
+				headerName		: "선포인트"
+				, field			: "prePntDcAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "상품권"		
-				, field			: "gfcdUseAmt"			
-				, width			: 80		
+				headerName		: "상품권"
+				, field			: "gfcdUseAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
 				}
 			},
 			{
-				headerName		: "실결제금액"		
-				, field			: "realOrdAmt"			
-				, width			: 80		
+				headerName		: "실결제금액"
+				, field			: "realOrdAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -421,9 +422,9 @@ var columnExchangeReqList = [
 		headerName	: "주문배송비정보",
 		children	: [
 			{
-				headerName		: "배송비"		
-				, field			: "delvFee"			
-				, width			: 80		
+				headerName		: "배송비"
+				, field			: "delvFee"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -433,9 +434,9 @@ var columnExchangeReqList = [
 			{headerName: "업체"			, field: "supplyCompCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
 			{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
 			{
-				headerName		: "무료배송비"		
-				, field			: "minOrdAmt"			
-				, width			: 80		
+				headerName		: "무료배송비"
+				, field			: "minOrdAmt"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -443,9 +444,9 @@ var columnExchangeReqList = [
 				, hide			: temp2
 			},
 			{
-				headerName		: "기본배송비"		
-				, field			: "orgDelvFee"			
-				, width			: 80		
+				headerName		: "기본배송비"
+				, field			: "orgDelvFee"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -453,9 +454,9 @@ var columnExchangeReqList = [
 				, hide			: temp2
 			},
 			{
-				headerName		: "반품배송비"		
-				, field			: "rtnDelvFee"			
-				, width			: 80		
+				headerName		: "반품배송비"
+				, field			: "rtnDelvFee"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -463,9 +464,9 @@ var columnExchangeReqList = [
 				, hide			: temp2
 			},
 			{
-				headerName		: "교환배송비"		
-				, field			: "excDelvFee"			
-				, width			: 80		
+				headerName		: "교환배송비"
+				, field			: "excDelvFee"
+				, width			: 80
 				, cellClass		: 'text-right'
 				, cellRenderer	: function (params) {
 					return params.value.addComma();
@@ -506,7 +507,7 @@ var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
 </script>
 
 <script>
-//현재 사유는 고객 입니다.
+//현재 사유는 회사 입니다.
 var isCustomer = false;
 
 //  사유
@@ -538,82 +539,94 @@ var fnChangeChgReason = function(reasonCd){
 }
 
 // 교환요청
-var fnExchangeRequestSubmit = function () {
-	var temp 		= false;
-	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
-	var allCanYn 	= "N";
+var fnExchange = function () {
+	console.log('a');
+	var qty		= false;
+	var opt		= false;
+	var wdGb	= $('#wdGb:checked').val();
 
 	// 1. 교환수량 체크
-	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
-		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
-			temp = true;
+	$.each(cancelRequestTargetList, function(idx, item) {
+		if (item.ordCanChgQty > 0) {
+			qty = true;
+			
+			if (!gagajf.isNull(item.ordChgOpt)) {
+				opt = true;
+			}
 		}
+	});
+
+	if (qty == false) {
+		mcxDialog.alert('교환 할 수량을 입력하세요.');
+		return;
 	}
 
-	if (temp == false) {
-		mcxDialog.alert('취소 할 수량을 입력하세요.');
+	if (opt == false) {
+		mcxDialog.alert('교환옵션을 선택해주세요.');
 		return;
 	}
 
-	// 3. 교환사유 체크
+	// 2. 교환사유 체크
 	var chgReason = $("#exchangeRequestFrm select[name=selectChgReason]").val();
 
 	if (gagajf.isNull(chgReason)) {
-		mcxDialog.alert("취소사유를 입력하세요."); 
+		mcxDialog.alert("교환사유를 입력하세요."); 
 		return ;
 	}
 
 	// 5. 회수지정보설정
-	var chgerNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
-	var chgerZipNo		= $("#exchangeRequestFrm input[name=chgerZipNo]").val();
-	var chgerBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
-	var chgerDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
-	
-	var chgerPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
-	var chgerPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
-	var chgerPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
+	if (wdGb == 'W') {
+		var chgerNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
+		var chgerZipNo		= $("#exchangeRequestFrm input[name=chgerZipNo]").val();
+		var chgerBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
+		var chgerDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
+		
+		var chgerPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
+		var chgerPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
+		var chgerPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
+		
+		var chgerTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
+		var chgerTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
+		var chgerTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
 	
-	var chgerTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
-	var chgerTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
-	var chgerTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
-
-	if (gagajf.isNull(chgerZipNo)) {
-		mcxDialog.alert("회수지주소를 입력하세요."); return;
-	}
-	if (gagajf.isNull(chgerBaseAddr)) {
-		mcxDialog.alert("회수지주소를 입력하세요."); return;
-	}
-	if (gagajf.isNull(chgerDtlAddr)) {
-		mcxDialog.alert("회수지주소를 입력하세요."); return;
-	}
+		if (gagajf.isNull(chgerZipNo)) {
+			mcxDialog.alert("회수지주소를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerBaseAddr)) {
+			mcxDialog.alert("회수지주소를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerDtlAddr)) {
+			mcxDialog.alert("회수지주소를 입력하세요."); return;
+		}
+		
+		if (gagajf.isNull(chgerPhnno1)) {
+			mcxDialog.alert("휴대전화를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerPhnno2)) {
+			mcxDialog.alert("휴대전화를 입력하세요."); return;
+		}
+		if (gagajf.isNull(chgerPhnno3)) {
+			mcxDialog.alert("휴대전화를 입력하세요."); return;
+		}
 	
-	if (gagajf.isNull(chgerPhnno1)) {
-		mcxDialog.alert("휴대전화를 입력하세요."); return;
-	}
-	if (gagajf.isNull(chgerPhnno2)) {
-		mcxDialog.alert("휴대전화를 입력하세요."); return;
-	}
-	if (gagajf.isNull(chgerPhnno3)) {
-		mcxDialog.alert("휴대전화를 입력하세요."); return;
+		var chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
+		var chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
+		var chgerEmail 		= orderInfoList[0].ordEmail;
 	}
 
-	var chgerPhnno 		= chgerPhnno1 + chgerPhnno2 + chgerPhnno3;
-	var chgerTelno 		= chgerTelno1 + chgerTelno2 + chgerTelno3;
-	var chgerEmail 		= orderInfoList[0].ordEmail;
-
 	// 교환지정보 설정
-	var recipNm			= $("#exchangeRequestFrm input[name=chgerNm]").val();
-	var recipZipNo		= $("#exchangeRequestFrm input[name=chgerZipNo]").val();
-	var recipBaseAddr	= $("#exchangeRequestFrm input[name=chgerBaseAddr]").val();
-	var recipDtlAddr	= $("#exchangeRequestFrm input[name=chgerDtlAddr]").val();
-
-	var recipPhnno1		= $("#exchangeRequestFrm select[name=chgerPhnno1]").val();
-	var recipPhnno2		= $("#exchangeRequestFrm input[name=chgerPhnno2]").val();
-	var recipPhnno3		= $("#exchangeRequestFrm input[name=chgerPhnno3]").val();
-
-	var recipTelno1		= $("#exchangeRequestFrm select[name=chgerTelno1]").val();
-	var recipTelno2		= $("#exchangeRequestFrm input[name=chgerTelno2]").val();
-	var recipTelno3		= $("#exchangeRequestFrm input[name=chgerTelno3]").val();
+	var recipNm			= $("#exchangeRequestFrm input[name=recipNm]").val();
+	var recipZipNo		= $("#exchangeRequestFrm input[name=recipZipNo]").val();
+	var recipBaseAddr	= $("#exchangeRequestFrm input[name=recipBaseAddr]").val();
+	var recipDtlAddr	= $("#exchangeRequestFrm input[name=recipDtlAddr]").val();
+
+	var recipPhnno1		= $("#exchangeRequestFrm select[name=recipPhnno1]").val();
+	var recipPhnno2		= $("#exchangeRequestFrm input[name=recipPhnno2]").val();
+	var recipPhnno3		= $("#exchangeRequestFrm input[name=recipPhnno3]").val();
+
+	var recipTelno1		= $("#exchangeRequestFrm select[name=recipTelno1]").val();
+	var recipTelno2		= $("#exchangeRequestFrm input[name=recipTelno2]").val();
+	var recipTelno3		= $("#exchangeRequestFrm input[name=recipTelno3]").val();
 	
 	if (gagajf.isNull(recipZipNo)) {
 		mcxDialog.alert("교환지주소를 입력하세요."); return;
@@ -643,8 +656,10 @@ var fnExchangeRequestSubmit = function () {
 		"ordNo"				: $('#exchangeRequestFrm input[name=ordNo]').val()
 		,"chgReason" 		: $('#exchangeRequestFrm input[name=chgReason]').val()
 		,"chgMemo"			: $('#chgMemo').val()
-		,"exchangeReqList" 	: cancelRequestTargetList
+		,"cancelReqList" 	: exchangeRequestList
 		,"isCustomer"		: isCustomer
+		,"wdGb"				: wdGb
+		,"addPayCost"		: addDelvFee
 		,"chgerNm"			: chgerNm
 		,"chgerEmail"		: chgerEmail
 		,"chgerZipNo"		: chgerZipNo
@@ -672,9 +687,9 @@ var fnExchangeRequestSubmit = function () {
 				'/orderChange/exchangeRequest/'
 				, jsonData
 				, function() {
-					uifnPopupClose('popupOrderDetail');
-					fnReOpenOrderDetailPopup();
-					uifnPopupClose('popupReturnRequestForm');
+					//uifnPopupClose('popupOrderDetail');
+					//fnReOpenOrderDetailPopup();
+					//uifnPopupClose('popupReturnRequestForm');
 				}
 			);
 		}
@@ -785,18 +800,6 @@ var fnChangeQty = function(param) {
 				return false;
 			}
 			
-			//var optCd2 = item.ordChgOpt;
-			//var stockQtyArr = item.currStockQtys.split(',');
-			//var sizeCdArr = item.optCd2s.split(',');
-			//var stockIdx = sizeCdArr.indexOf(optCd2);
-			//var stockQty = stockQtyArr[stockIdx];
-
-			//if (stockQty < ordCanChgQty) {
-			//	mcxDialog.alert(item.itemNm + ' ' + optCd2 + '의 재고수량이 부족합니다.');
-			//} else {
-			//	item.ordCanChgQty = ordCanChgQty;
-			//}
-			
 			item.ordCanChgQty = ordCanChgQty;
 			
 			if (ordCanChgQty > 0) {
@@ -810,6 +813,9 @@ var fnChangeQty = function(param) {
 	// 추가배송비 설정
 	fnAddDelvFee(exchangeRequestTargetList);
 
+	// 교환대상목록 설정
+	exchangeRequestList = exchangeRequestTargetList;
+
 	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
 }
 

+ 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) {

部分文件因为文件数量过多而无法显示