Bladeren bron

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

jsh77b 5 jaren geleden
bovenliggende
commit
f01e92f4a8
29 gewijzigde bestanden met toevoegingen van 3092 en 597 verwijderingen
  1. 0 2
      src/main/java/com/style24/admin/biz/dao/TsaDeliveryDao.java
  2. 170 0
      src/main/java/com/style24/admin/biz/dao/TsaFreegiftPromotionDao.java
  3. 17 0
      src/main/java/com/style24/admin/biz/dao/TsaGoodsDao.java
  4. 0 32
      src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java
  5. 0 1
      src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java
  6. 255 0
      src/main/java/com/style24/admin/biz/service/TsaFreegiftPromotionService.java
  7. 61 44
      src/main/java/com/style24/admin/biz/service/TsaGoodsService.java
  8. 0 77
      src/main/java/com/style24/admin/biz/service/TsaMarketingService.java
  9. 2 1
      src/main/java/com/style24/admin/biz/service/TsaOrderChangeService.java
  10. 38 8
      src/main/java/com/style24/admin/biz/web/TsaGoodsController.java
  11. 46 7
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  12. 9 4
      src/main/java/com/style24/admin/biz/web/TsaOrderChangeController.java
  13. 13 0
      src/main/java/com/style24/persistence/domain/Delivery.java
  14. 47 9
      src/main/java/com/style24/persistence/domain/FreeGoodsPromotion.java
  15. 4 2
      src/main/java/com/style24/persistence/domain/FreeGoodsSectionVal.java
  16. 21 0
      src/main/java/com/style24/persistence/domain/GoodsNotiInfo.java
  17. 403 0
      src/main/java/com/style24/persistence/domain/Order.java
  18. 0 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml
  19. 379 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaFreegiftPromotion.xml
  20. 67 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaGoods.xml
  21. 0 33
      src/main/java/com/style24/persistence/mybatis/shop/TsaMarketing.xml
  22. 3 0
      src/main/java/com/style24/persistence/mybatis/shop/TsaOcm.xml
  23. 53 17
      src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml
  24. 24 23
      src/main/webapp/WEB-INF/views/goods/GoodsNotiInfoForm.html
  25. 41 22
      src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionForm.html
  26. 557 312
      src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html
  27. 877 0
      src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html
  28. 1 1
      src/main/webapp/ux/css/admin.ui.css
  29. 4 1
      src/main/webapp/ux/js/admin.popup.js

+ 0 - 2
src/main/java/com/style24/admin/biz/dao/TsaDeliveryDao.java

@@ -112,6 +112,4 @@ public interface TsaDeliveryDao {
 	 * @since 2020. 11. 11
 	 */	
 	Collection<Delivery> getDeliveryWithdrawDirectiveList(Delivery delivery);
-
-		
 }

+ 170 - 0
src/main/java/com/style24/admin/biz/dao/TsaFreegiftPromotionDao.java

@@ -0,0 +1,170 @@
+package com.style24.admin.biz.dao;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.style24.persistence.domain.*;
+import org.springframework.stereotype.Component;
+
+import com.style24.core.support.annotation.ShopDs;
+
+/**
+ * 마케팅 Dao
+ *
+ * @author xodud1202
+ * @since 2020. 12. 17
+ */
+@ShopDs
+@Component
+public interface TsaFreegiftPromotionDao {
+	/**
+	 * 사은품 프로모션 리스트
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2020. 12. 17
+	 */
+	Collection<FreeGoodsPromotion> getFreeGoodsPromotionList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 등록 제휴몰 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 01. 18
+	 */
+	List<Extmall> getFreegiftExtmallList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 등록 공급업체 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 01. 18
+	 */
+	List<SupplyCompany> getFreegiftSupplyCompList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 등록 브랜드 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 01. 18
+	 */
+	List<Brand> getFreegiftBrandList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 등록 적용상품 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 01. 18
+	 */
+	List<Goods> getFreegiftGoodsList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 등록 적용상품 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 01. 18
+	 */
+	List<FreeGoodsPromotion> getFreegiftSectionList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 등록 적용상품 리스트 조회
+	 * @param param
+	 * @return
+	 * @author xodud1202
+	 * @since 2021. 01. 18
+	 */
+	List<FreeGoodsSectionVal> getFreegiftFreegoodsList(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 마스터 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void createFreegoodsPromotionInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 제휴몰 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void createFreegiftExtmallInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 대상 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void createFreegiftGoodsInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 사은품 지급 조건 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void createFreegiftSectionInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 사은품 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void createPromotionFreeGoodsInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 마스터 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 19
+	 */
+	void updateFreegoodsPromotionInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 외부몰 정보 삭제
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 19
+	 */
+	void deleteFreegiftExtmallInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 적용 업체/브랜드/상품 제외상품 정보 삭제
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 19
+	 */
+	void deleteFreegiftGoodsInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 적용 조건 정보 삭제
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 19
+	 */
+	void deleteFreegiftSectionInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 지급 사은품 정보 삭제
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 19
+	 */
+	void deleteFreegiftValInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 상태 수정
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 20
+	 */
+	void updateFreegoodsPromotionStat(FreeGoodsPromotion param);
+}

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

@@ -1102,5 +1102,22 @@ public interface TsaGoodsDao {
 	 */
 	public void saveGoodsWmsIncomelot(WmsGoods wmsGoods);
 
+	/**
+	 * 고시분류별 상품고시정보 목록
+	 * @param goodsNotiInfo - 상품고시정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 21
+	 */
+	public Collection<GoodsNotiInfo> getGoodsNotiInfoListByNotiClsf(GoodsNotiInfo goodsNotiInfo);
+
+	/**
+	 * 고시분류 칼럼 정보
+	 * @param niClsfCd - 고시분류코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 21
+	 */
+	GoodsNotiInfo getNotiClsfColumnInfo(String niClsfCd);
 
 }

+ 0 - 32
src/main/java/com/style24/admin/biz/dao/TsaMarketingDao.java

@@ -1,32 +0,0 @@
-package com.style24.admin.biz.dao;
-
-import java.util.Collection;
-
-import org.springframework.stereotype.Component;
-
-import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.FreeGoodsPromotion;
-
-/**
- * 마케팅 Dao
- *
- * @author xodud1202
- * @since 2020. 12. 17
- */
-@ShopDs
-@Component
-public interface TsaMarketingDao {
-	/* xodud1202 진행 */
-
-	/**
-	 * 사은품 프로모션 리스트
-	 * @param marketing
-	 * @return
-	 * @author xodud1202
-	 * @since 2020. 12. 17
-	 */
-	Collection<FreeGoodsPromotion> getFreeGoodsPromotionList(FreeGoodsPromotion marketing);
-
-	/* // xodud1202 진행 */
-
-}

+ 0 - 1
src/main/java/com/style24/admin/biz/service/TsaDeliveryService.java

@@ -182,5 +182,4 @@ public class TsaDeliveryService {
 	public Collection<Delivery> getDeliveryWithdrawDirectiveList(Delivery delivery) {
 		return deliveryDao.getDeliveryWithdrawDirectiveList(delivery);
 	}
-	
 }

+ 255 - 0
src/main/java/com/style24/admin/biz/service/TsaFreegiftPromotionService.java

@@ -0,0 +1,255 @@
+package com.style24.admin.biz.service;
+
+import com.gagaframework.web.parameter.GagaMap;
+import com.style24.admin.biz.dao.TsaFreegiftPromotionDao;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.persistence.domain.Extmall;
+import com.style24.persistence.domain.FreeGoodsPromotion;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ *상품관리 Service
+ *
+ * @author xodud1202
+ * @since 2020. 12. 17
+ */
+@Service
+@Slf4j
+public class TsaFreegiftPromotionService {
+
+	@Autowired
+	private TsaFreegiftPromotionDao freegiftPromotionDao;
+
+	/**
+	 * 사은품 프로모션 리스트
+	 * @param param
+	 * @return Collection<FreeGoodsPromotion>
+	 * @author xodud1202
+	 * @since 2020. 12. 17
+	 */
+	public Collection<FreeGoodsPromotion> getFreeGoodsPromotionList(FreeGoodsPromotion param) {
+		return freegiftPromotionDao.getFreeGoodsPromotionList(param);
+	}
+
+	/**
+	 * 사은품 프로모션 디테일 조회
+	 * @param param
+	 * @return GagaMap
+	 * @author xodud1202
+	 * @since 2020. 12. 17
+	 */
+	public GagaMap getFreegiftDetailInfo(FreeGoodsPromotion param) {
+		GagaMap result = new GagaMap();
+
+		// 사은품 프로모션 마스터 정보 조회
+		List<FreeGoodsPromotion> freeGoodsList = (ArrayList<FreeGoodsPromotion>) getFreeGoodsPromotionList(param);
+		// 상세 조회 내역이 없거나, 1개가 아닐 경우
+		if(freeGoodsList == null || freeGoodsList.size() != 1 ) {
+			return null;
+		}
+		FreeGoodsPromotion freegift = freeGoodsList.get(0);							// 사은품 프로모션 마스터 정보
+		freegift.setExtmallList(getFreegiftExtmallList(param));						// 사은품 프로모션 제휴몰 정보
+		freegift.setBrandList(freegiftPromotionDao.getFreegiftBrandList(param));			// 사은품 프로모션 브랜드 정보
+		freegift.setSupplyCompList(freegiftPromotionDao.getFreegiftSupplyCompList(param));	// 사은품 프로모션 공급업체 정보
+		param.setGoodsGb("G800_20");
+		freegift.setApplyGoodsList(freegiftPromotionDao.getFreegiftGoodsList(param));			// 사은품 프로모션 적용상품 정보
+		param.setGoodsGb("G800_30");
+		freegift.setExceptGoodsList(freegiftPromotionDao.getFreegiftGoodsList(param));			// 사은품 프로모션 제외상품 정보
+
+		List<FreeGoodsPromotion> freegoodsSectionList = freegiftPromotionDao.getFreegiftSectionList(param);
+		for(int i = 0 ; i < freegoodsSectionList.size() ; i++) {
+			param.setFreegiftSectionSq(freegoodsSectionList.get(i).getFreegiftSectionSq());
+			if(i == 0) {		// 첫번째 조건
+				freegift.setSectionVal(freegoodsSectionList.get(i).getSectionVal());
+				freegift.setFreeGoods1(freegiftPromotionDao.getFreegiftFreegoodsList(param));
+			} else {			// 두번째 사은품 조건
+				freegift.setSectionVal2(freegoodsSectionList.get(i).getSectionVal());
+				freegift.setFreeGoods2(freegiftPromotionDao.getFreegiftFreegoodsList(param));
+			}
+		}
+
+		result.put("freegift", freegift);
+		result.put("param", param);
+		return result;
+	}
+
+	/**
+	 * 사은품 프로모션 제휴몰 리스트
+	 * @param param
+	 * @return List<Extmall>
+	 * @author xodud1202
+	 * @since 2020. 12. 17
+	 */
+	public List<Extmall> getFreegiftExtmallList(FreeGoodsPromotion param) {
+		return freegiftPromotionDao.getFreegiftExtmallList(param);
+	}
+
+	/**
+	 * 사은품 프로모션 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 12. 19
+	 */
+	@Transactional("shopTxnManager")
+	public void saveFreegoodsPromotionInfo(FreeGoodsPromotion param) {
+		param.setRegNo(TsaSession.getInfo().getUserNo());
+		param.setUpdNo(TsaSession.getInfo().getUserNo());
+
+		if("U".equals(param.getGbn()) && param.getFreegiftSq() != 0) {
+			freegiftPromotionDao.updateFreegoodsPromotionInfo(param);	// 사은품 프로모션 정보 수정
+			freegiftPromotionDao.deleteFreegiftExtmallInfo(param);		// 사은품 프로모션 제휴몰 데이터 삭제
+			freegiftPromotionDao.deleteFreegiftGoodsInfo(param);		// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
+			freegiftPromotionDao.deleteFreegiftSectionInfo(param);		// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
+			freegiftPromotionDao.deleteFreegiftValInfo(param);			// 사은품 프로모션 적용 업체/브랜드/상품 제외상품 정보 삭제
+		} else {
+			param.setFreegiftStat("G232_10");					// 프로모션 등록이면 대기 상태로 저장
+			freegiftPromotionDao.createFreegoodsPromotionInfo(param);   // 사은품 프로모션 마스터 정보 저장
+		}
+
+		// 제휴몰 등록
+		if(param.getExtmallYn() != null && "Y".equals(param.getExtmallYn()) ) {
+			if(param.getExtmallList() != null && param.getExtmallList().size() > 0) {
+				FreeGoodsPromotion extmallInfo = new FreeGoodsPromotion();
+				extmallInfo.setFreegiftSq(param.getFreegiftSq());
+				extmallInfo.setRegNo(param.getRegNo());
+				extmallInfo.setUpdNo(param.getUpdNo());
+
+				// 제휴몰 리스트만큼 반복
+				for(int i = 0 ; i < param.getExtmallList().size() ; i++) {
+					extmallInfo.setExtmallId(param.getExtmallList().get(i).getExtmallId());
+					extmallInfo.setVendorId(param.getExtmallList().get(i).getVendorId());
+					freegiftPromotionDao.createFreegiftExtmallInfo(extmallInfo);		// 제휴몰 리스트 정보 저장
+				}
+			}
+		}
+
+		// 공급업체 등록
+		if(param.getSupplyCompList() != null && param.getSupplyCompList().size() > 0) {
+			FreeGoodsPromotion supplyComp = new FreeGoodsPromotion();
+			supplyComp.setFreegiftSq(param.getFreegiftSq());
+			supplyComp.setGoodsGb("G800_20");			// 적용 상품 (공급업체, 브랜드, 적용 상품 3가지는 적용 상품 코드로 등록함 G800_20|적용상품, G800_30|제외상품)
+			supplyComp.setTargetGb("G260_13");			// 적용 대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
+			supplyComp.setRegNo(param.getRegNo());
+			supplyComp.setUpdNo(param.getUpdNo());
+
+			// 공급업체 리스트만큼 반복
+			for(int i = 0 ; i < param.getSupplyCompList().size() ; i++) {
+				supplyComp.setTargetVal(param.getSupplyCompList().get(i).getSupplyCompCd());
+				freegiftPromotionDao.createFreegiftGoodsInfo(supplyComp);				// 적용 공급업체 리스트 저장
+			}
+		}
+
+		// 브랜드 설정 데이터 저장
+		if(param.getBrandList() != null && param.getBrandList().size() > 0) {
+			FreeGoodsPromotion brand = new FreeGoodsPromotion();
+			brand.setFreegiftSq(param.getFreegiftSq());
+			brand.setGoodsGb("G800_20");			// 적용 상품 (공급업체, 브랜드, 적용 상품 3가지는 적용 상품 코드로 등록함 G800_20|적용상품, G800_30|제외상품)
+			brand.setTargetGb("G260_12");			// 적용 대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
+			brand.setRegNo(param.getRegNo());
+			brand.setUpdNo(param.getUpdNo());
+
+			// 브랜드 리스트만큼 반복
+			for(int i = 0 ; i < param.getBrandList().size() ; i++) {
+				brand.setTargetVal(param.getBrandList().get(i).getBrandCd());
+				freegiftPromotionDao.createFreegiftGoodsInfo(brand);				// 적용 브랜드 리스트 저장
+			}
+		}
+
+		// 적용 상품 데이터 저장
+		if(param.getApplyGoodsList() != null && param.getApplyGoodsList().size() > 0) {
+			FreeGoodsPromotion applyGoods = new FreeGoodsPromotion();
+			applyGoods.setFreegiftSq(param.getFreegiftSq());
+			applyGoods.setGoodsGb("G800_20");			// 적용 상품 (공급업체, 브랜드, 적용 상품 3가지는 적용 상품 코드로 등록함 G800_20|적용상품, G800_30|제외상품)
+			applyGoods.setTargetGb("G260_10");			// 적용 대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
+			applyGoods.setRegNo(param.getRegNo());
+			applyGoods.setUpdNo(param.getUpdNo());
+
+			// 브랜드 리스트만큼 반복
+			for(int i = 0 ; i < param.getApplyGoodsList().size() ; i++) {
+				applyGoods.setTargetVal(param.getApplyGoodsList().get(i).getGoodsCd());
+				freegiftPromotionDao.createFreegiftGoodsInfo(applyGoods);			// 적용 상품 리스트 저장
+			}
+		}
+
+		// 제외 상품 데이터 저장
+		if(param.getExceptGoodsList() != null && param.getExceptGoodsList().size() > 0) {
+			FreeGoodsPromotion exceptGoods = new FreeGoodsPromotion();
+			exceptGoods.setFreegiftSq(param.getFreegiftSq());
+			exceptGoods.setGoodsGb("G800_30");			// 적용 상품 (공급업체, 브랜드, 적용 상품 3가지는 적용 상품 코드로 등록함 G800_20|적용상품, G800_30|제외상품)
+			exceptGoods.setTargetGb("G260_10");			// 적용 대상 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
+			exceptGoods.setRegNo(param.getRegNo());
+			exceptGoods.setUpdNo(param.getUpdNo());
+
+			// 적용 상품 리스트만큼 반복
+			for(int i = 0 ; i < param.getExceptGoodsList().size() ; i++) {
+				exceptGoods.setTargetVal(param.getExceptGoodsList().get(i).getGoodsCd());
+				freegiftPromotionDao.createFreegiftGoodsInfo(exceptGoods);			// 적용 상품 리스트 저장
+			}
+		}
+
+		// 사은품 조건1 사은품 존재 여부 및 구매금액 제한 조건 체크
+		if(param.getFreeGoods1() != null && param.getFreeGoods1().size() > 0 && param.getSectionVal() > 0) {
+			// 사은품 지급조건 Section 저장
+			FreeGoodsPromotion freegoodsGiveInfo = new FreeGoodsPromotion();
+			freegoodsGiveInfo.setFreegiftSq(param.getFreegiftSq());
+			freegoodsGiveInfo.setSectionGb("G810_11");				// 사은품 프로모션 구간 설정 구분값 (G810_10|수량, G810_11|금액)  >>  사은품 프로모션 기획서상 금액 구분만 존재함.
+			freegoodsGiveInfo.setSectionVal(param.getSectionVal());	// 사은품조건 section1 구매금액 조건
+			freegoodsGiveInfo.setRegNo(param.getRegNo());
+			freegoodsGiveInfo.setUpdNo(param.getUpdNo());
+			freegiftPromotionDao.createFreegiftSectionInfo(freegoodsGiveInfo);	// 사은품 지급 조건 영역 저장
+
+			// 지급 사은품 리스트1 반복
+			for (int i = 0 ; i < param.getFreeGoods1().size() ; i++) {
+				freegoodsGiveInfo.setItemCd(param.getFreeGoods1().get(i).getProductNo() + "");		// 사은품 번호
+				freegoodsGiveInfo.setUsePoint(param.getFreeGoods1().get(i).getUsePoint());			// 사은품 포인트액
+				freegoodsGiveInfo.setItemQty(param.getFreeGoods1().get(i).getItemQty());			// 주문시 지급 수량
+				freegoodsGiveInfo.setLimitQty(param.getFreeGoods1().get(i).getLimitQty());			// 한정 수량
+				freegoodsGiveInfo.setLeftQty(param.getFreeGoods1().get(i).getLimitQty());			// 잔여 수량
+
+				freegiftPromotionDao.createPromotionFreeGoodsInfo(freegoodsGiveInfo);	// 사은품 지급 상품 영역 저장
+			}
+		}
+
+		// 사은품 조건2 사은품 존재 여부 및 구매금액 제한 조건 체크
+		if(param.getFreeGoods2() != null && param.getFreeGoods2().size() > 0 && param.getSectionVal2() > 0) {
+			// 사은품 지급조건 Section 저장
+			FreeGoodsPromotion freegoodsGiveInfo = new FreeGoodsPromotion();
+			freegoodsGiveInfo.setFreegiftSq(param.getFreegiftSq());
+			freegoodsGiveInfo.setSectionGb("G810_11");					// 사은품 프로모션 구간 설정 구분값 (G810_10|수량, G810_11|금액)  >>  사은품 프로모션 기획서상 금액 구분만 존재함.
+			freegoodsGiveInfo.setSectionVal(param.getSectionVal2());	// 사은품조건 section2 구매금액 조건
+			freegoodsGiveInfo.setRegNo(param.getRegNo());
+			freegoodsGiveInfo.setUpdNo(param.getUpdNo());
+			freegiftPromotionDao.createFreegiftSectionInfo(freegoodsGiveInfo);	// 사은품 지급 조건 영역 저장
+
+			// 지급 사은품 리스트2 반복
+			for (int i = 0 ; i < param.getFreeGoods2().size() ; i++) {
+				freegoodsGiveInfo.setItemCd(param.getFreeGoods2().get(i).getProductNo() + "");		// 사은품 번호
+				freegoodsGiveInfo.setUsePoint(param.getFreeGoods2().get(i).getUsePoint());			// 사은품 포인트액
+				freegoodsGiveInfo.setItemQty(param.getFreeGoods2().get(i).getItemQty());			// 주문시 지급 수량
+				freegoodsGiveInfo.setLimitQty(param.getFreeGoods2().get(i).getLimitQty());			// 한정 수량
+				freegoodsGiveInfo.setLeftQty(param.getFreeGoods2().get(i).getLimitQty());			// 잔여 수량
+
+				freegiftPromotionDao.createPromotionFreeGoodsInfo(freegoodsGiveInfo);	// 사은품 지급 상품 영역 저장
+			}
+		}
+	}
+
+	/**
+	 * 사은품 프로모션 상태 수정
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 12. 20
+	 */
+	@Transactional("shopTxnManager")
+	public void updateFreegoodsPromotionStat(FreeGoodsPromotion param) {
+		param.setUpdNo(TsaSession.getInfo().getUserNo());
+		freegiftPromotionDao.updateFreegoodsPromotionStat(param);
+	}
+}

+ 61 - 44
src/main/java/com/style24/admin/biz/service/TsaGoodsService.java

@@ -99,7 +99,6 @@ public class TsaGoodsService {
 	@Autowired
 	private NaverLowestPriceApi naverLowestPriceApi;
 
-
 	@Autowired
 	private ObjectMapper mapper;
 
@@ -143,7 +142,7 @@ public class TsaGoodsService {
 		for (Itemkind itemkind : itemkindList) {
 			itemkind.setRegNo(TsaSession.getInfo().getUserNo());
 			itemkind.setUpdNo(TsaSession.getInfo().getUserNo());
-			itemkind.setItemkindNm(GagaStringUtil.replace(GagaStringUtil.replace(itemkind.getItemkindNm(), "&lt;", "<"),"&gt;", ">"));
+			itemkind.setItemkindNm(GagaStringUtil.replace(GagaStringUtil.replace(itemkind.getItemkindNm(), "&lt;", "<"), "&gt;", ">"));
 			//itemkind.setItemkindEnm(GagaStringUtil.replace(GagaStringUtil.replace(itemkind.getItemkindEnm(), "&lt;", "<"),"&gt;", ">"));
 			goodsDao.saveItemkindInfo(itemkind);
 		}
@@ -234,7 +233,7 @@ public class TsaGoodsService {
 
 		for (NotiInfo notiInfo : notiInfoList) {
 			if (!StringUtils.isBlank(notiInfo.getNiContent())) {
-				notiInfo.setNiContent(GagaStringUtil.replace(GagaStringUtil.replace(notiInfo.getNiContent(),"&lt;", "<"),"&gt;", ">"));
+				notiInfo.setNiContent(GagaStringUtil.replace(GagaStringUtil.replace(notiInfo.getNiContent(), "&lt;", "<"), "&gt;", ">"));
 			}
 			notiInfo.setRegNo(TsaSession.getInfo().getUserNo());
 			notiInfo.setUpdNo(TsaSession.getInfo().getUserNo());
@@ -376,11 +375,11 @@ public class TsaGoodsService {
 		if ("Y".equals(goodsSearch.getImageViewYn())) {
 			// 헤더 title 설정
 			String[] listTitles = {"이미지", "상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도", "시즌",
-				"정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부","승인일시"};
+				"정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "승인일시"};
 
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정
 			String[] cellNames = {"SYS_IMG_NM", "GOODS_CD", "SUPPLY_COMP_CD", "BRAND_GRP_NM", "GOODS_NM", "ITEMKIND_NM",
-				"STOCK_QTY_SUM", "GOODS_STAT", "STYLE_YEAR", "SEASON_CD",  "LIST_PRICE", "CURR_PRICE",
+				"STOCK_QTY_SUM", "GOODS_STAT", "STYLE_YEAR", "SEASON_CD", "LIST_PRICE", "CURR_PRICE",
 				"DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN", "FORMAL_GB", "RETURNABLE_YN", "FRST_CFRM_DT"};
 
 			String[] cellTypes = {GagaExcelConstants.CellType.IMAGE.name(),
@@ -398,8 +397,8 @@ public class TsaGoodsService {
 			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch); // map형식으로 조회
 			if (dataList != null && !dataList.isEmpty()) {
 				for (GagaMap gagaMap : dataList) {
-					if (!StringUtils.isBlank(gagaMap.get("SYS_IMG_NM").toString()) ) {
-						gagaMap.set("SYS_IMG_NM", targetPath + '/' +  gagaMap.get("SYS_IMG_NM").toString());
+					if (!StringUtils.isBlank(gagaMap.get("SYS_IMG_NM").toString())) {
+						gagaMap.set("SYS_IMG_NM", targetPath + '/' + gagaMap.get("SYS_IMG_NM").toString());
 					}
 				}
 			}
@@ -413,22 +412,22 @@ public class TsaGoodsService {
 		} else {
 			// 헤더 title 설정
 			String[] listTitles = {"상품코드", "업체명", "브랜드명", "상품명", "품목", "재고", "상품상태", "스타일년도",
-				"시즌",  "정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "승인일시"};
+				"시즌", "정상가", "판매가", "할인율", "가격변경일", "ERP재고연동여부", "정상이월구분", "반품가능 여부", "승인일시"};
 
 			// DB 처리 시 사용되는 파라미터명(셀명) 설정
 			String[] cellNames = {"GOODS_CD", "SUPPLY_COMP_CD", "BRAND_GRP_NM", "GOODS_NM", "ITEMKIND_NM", "STOCK_QTY_SUM", "GOODS_STAT", "STYLE_YEAR",
-				"SEASON_CD",  "LIST_PRICE", "CURR_PRICE", "DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN", "FORMAL_GB", "RETURNABLE_YN", "FRST_CFRM_DT"};
+				"SEASON_CD", "LIST_PRICE", "CURR_PRICE", "DC_RATE", "PRICE_UPD_DT", "ERP_STOCK_LINK_YN", "FORMAL_GB", "RETURNABLE_YN", "FRST_CFRM_DT"};
 
 			String[] cellTypes = {
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
-			GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
-			GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name()};
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+				GagaExcelConstants.CellType.CHAR_RIGHT.name(), GagaExcelConstants.CellType.CHAR_RIGHT.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name(),
+				GagaExcelConstants.CellType.CHAR_CENTER.name(), GagaExcelConstants.CellType.CHAR_CENTER.name()};
 
 			Collection<GagaMap> dataList = goodsDao.getGoodsInfoExcelList(goodsSearch);
 
@@ -540,7 +539,7 @@ public class TsaGoodsService {
 			for (GoodsDesc tmpGoodsDesc : goodsDescList) {
 				goodsDescSb.append(tmpGoodsDesc.getGoodsDesc());
 			}
-		}else {
+		} else {
 			goodsDescSb.append("");
 		}
 		return goodsDescSb.toString();
@@ -984,7 +983,7 @@ public class TsaGoodsService {
 				goods.setListPrice(newRepGoodsPrice);
 				goods.setDcRate(0);
 				goods.setChDataYn("Y");
-			}else {
+			} else {
 				if (goods.getCurrPrice() != goods.getCurrPriceOrg()) {
 					goods.setCurrBprice(goods.getCurrPriceOrg());
 					goods.setListPrice(goods.getCurrPrice());
@@ -992,7 +991,7 @@ public class TsaGoodsService {
 				}
 			}
 
-		}else {
+		} else {
 			// 가격변경일
 			if (goods.getCurrPrice() != goods.getCurrPriceOrg()) {
 				goods.setCurrBprice(goods.getCurrPriceOrg());
@@ -1087,11 +1086,11 @@ public class TsaGoodsService {
 			goodsOrderGrade.setGoodsCd(goods.getGoodsCd());
 			goodsOrderGrade.setRegNo(TsaSession.getInfo().getUserNo());
 			goodsDao.deleteGoodsCustGrade(goodsOrderGrade);
-			for(String custGrade : goods.getGoodsOrderGrade()) {
+			for (String custGrade : goods.getGoodsOrderGrade()) {
 				goodsOrderGrade.setCustGrade(custGrade);
 				goodsDao.createGoodsCustGrade(goodsOrderGrade);
 			}
-		}else {
+		} else {
 			Goods goodsOrderGrade = new Goods();
 			goodsOrderGrade.setGoodsCd(goods.getGoodsCd());
 			goodsOrderGrade.setRegNo(TsaSession.getInfo().getUserNo());
@@ -1288,7 +1287,6 @@ public class TsaGoodsService {
 		}
 	}
 
-
 	/**
 	 * 상품 사이즈 옵션정보 이력 생성
 	 *
@@ -1462,7 +1460,7 @@ public class TsaGoodsService {
 			if (StringUtils.isBlank(extendGoods.getBrandCd())) {
 				throw new IllegalStateException(message.getMessage("구성상품 중 " + goodsCompose.getCompsGoodsCd() + " 상품 정보를 확인해 주세요."));
 			}
-			listPriceSum += extendGoods.getListPrice() * goodsCompose.getQty() ;
+			listPriceSum += extendGoods.getListPrice() * goodsCompose.getQty();
 			currPriceSum += goodsCompose.getCompsCurrPrice(); // 입력값
 
 			if ("Y".equals(goodsCompose.getBaseYn())) {
@@ -1811,7 +1809,7 @@ public class TsaGoodsService {
 			goodsResSell.setRegNo(TsaSession.getInfo().getUserNo());
 			goodsResSell.setUpdNo(TsaSession.getInfo().getUserNo());
 
-			if(goodsDao.getGoodsResSellDupChkCount(goodsResSell) > 0 ) {
+			if (goodsDao.getGoodsResSellDupChkCount(goodsResSell) > 0) {
 				throw new IllegalStateException("이미 등록된 상품예약판매가 존재합니다. \n(상품코드 : " + goodsCd + ")");
 			}
 
@@ -1993,7 +1991,7 @@ public class TsaGoodsService {
 			goodsPriceRes.setRegNo(TsaSession.getInfo().getUserNo());
 			goodsPriceRes.setUpdNo(TsaSession.getInfo().getUserNo());
 
-			if(goodsDao.getGoodsPriceResDupChkCount(goodsPriceRes) > 0 ) {
+			if (goodsDao.getGoodsPriceResDupChkCount(goodsPriceRes) > 0) {
 				throw new IllegalStateException("이미 등록된 상품 가격예약이 존재합니다. \n(상품코드 : " + goodsCd + ")");
 			}
 
@@ -2100,12 +2098,12 @@ public class TsaGoodsService {
 			SimpleDateFormat dateFormatParser = new SimpleDateFormat("yyyyMMddHH");
 			dateFormatParser.setLenient(false);
 			try {
-				dateFormatParser.parse(goodsPriceRes.getApplyStdt() );
+				dateFormatParser.parse(goodsPriceRes.getApplyStdt());
 			} catch (Exception e) {
 				return (cnt + 2) + "행의 예약시작일시을 확인해주세요.";
 			}
 			try {
-				dateFormatParser.parse(goodsPriceRes.getApplyEddt() );
+				dateFormatParser.parse(goodsPriceRes.getApplyEddt());
 			} catch (Exception e) {
 				return (cnt + 2) + "행의 예약종료일시을 확인해주세요.";
 			}
@@ -2132,18 +2130,16 @@ public class TsaGoodsService {
 				return (cnt + 2) + "행의 상품은 자사상품이 아닙니다.";
 			}
 
-			if(goodsDao.getGoodsPriceResDupChkCount(goodsPriceRes) > 0 ) {
+			if (goodsDao.getGoodsPriceResDupChkCount(goodsPriceRes) > 0) {
 				return (cnt + 2) + "행은 이미 등록된 상품 가격예약이 존재합니다. \n(상품코드 : " + goodsPriceRes.getGoodsCd() + ")";
 			}
 
-
 			cnt++;
 		}
 
 		return "SUCC";
 	}
 
-
 	/**
 	 * 상품 동영상 목록 조회
 	 *
@@ -2186,18 +2182,18 @@ public class TsaGoodsService {
 	public void saveGoodsVideo(Video video) {
 		video.setRegNo(TsaSession.getInfo().getUserNo());
 		video.setUpdNo(TsaSession.getInfo().getUserNo());
-		if (video.getVideoSq() == null ||  video.getVideoSq() == 0) {
+		if (video.getVideoSq() == null || video.getVideoSq() == 0) {
 
 			String videoSeq = goodsDao.getVideoSeq(video);
 			if (StringUtils.isBlank(videoSeq)) {
 				goodsDao.createVideo(video);
-			}else {
+			} else {
 				//video.setVideoSq(Integer.parseInt(videoSeq));  //why?
 				//goodsDao.updateVideo(video);
 			}
 		}
 
-		if (video.getVideoSq() == null ||  video.getVideoSq() == 0) {
+		if (video.getVideoSq() == null || video.getVideoSq() == 0) {
 			String videoSeq = goodsDao.getVideoSeq(video);
 
 			if (!StringUtils.isBlank(videoSeq)) {
@@ -2295,7 +2291,6 @@ public class TsaGoodsService {
 			goodsPriceRes.setRegNo(TsaSession.getInfo().getUserNo());
 			goodsPriceRes.setUpdNo(TsaSession.getInfo().getUserNo());
 
-
 			Goods goods = new Goods();
 			goods.setRegNo(TsaSession.getInfo().getUserNo());
 			goods.setUpdNo(TsaSession.getInfo().getUserNo());
@@ -2362,7 +2357,7 @@ public class TsaGoodsService {
 		}
 
 		// 2. 일 최초 조회이면 테이블 삭제
-		String regYmd  = goodsDao.getGoodsNaverLowestPriceReqYmd();
+		String regYmd = goodsDao.getGoodsNaverLowestPriceReqYmd();
 		if (!StringUtils.isBlank(regYmd) && !regYmd.equals(GagaDateUtil.getToday())) {
 			goodsDao.deleteGoodsNaverLowestPrice();
 		}
@@ -2393,7 +2388,7 @@ public class TsaGoodsService {
 				log.info("saveGoodsNaverLowestPrice  22 =  {}", GagaDateUtil.getTodayDateTime());
 				NaverLowestPrice naverLowestPrice = naverLowestPriceApi.getLowestPrice(goodsCd);
 
-				log.info("[saveGoodsNaverLowestPrice] naverLowestPrice= {}",naverLowestPrice);
+				log.info("[saveGoodsNaverLowestPrice] naverLowestPrice= {}", naverLowestPrice);
 				if (naverLowestPrice != null) {
 					GoodsNaverLowestPrice goodsNaverLowestPrice = new GoodsNaverLowestPrice();
 					goodsNaverLowestPrice.setReqYmd(GagaDateUtil.getToday());
@@ -2496,7 +2491,8 @@ public class TsaGoodsService {
 
 			int idx = 0;
 			for (AdKeywordGoods adKeywordGoods : adKeywordGoodsList) {
-				if (idx == 0) goodsDao.deleteAdKeywordGoods(adKeywordGoods); // 전체 상품 삭제
+				if (idx == 0)
+					goodsDao.deleteAdKeywordGoods(adKeywordGoods); // 전체 상품 삭제
 				adKeywordGoods.setAdKeywordSq(adKeyword.getAdKeywordSq());
 				adKeywordGoods.setRegNo(TsaSession.getInfo().getUserNo());
 				adKeywordGoods.setUpdNo(TsaSession.getInfo().getUserNo());
@@ -2550,7 +2546,6 @@ public class TsaGoodsService {
 		return goodsDao.getReinboundInformList(goodsSearch);
 	}
 
-
 	/**
 	 * 재입고알림 발송 처리
 	 *
@@ -2626,7 +2621,7 @@ public class TsaGoodsService {
 	 * @since 2020. 12. 21
 	 */
 	@Transactional("shopTxnManager")
-	public void saveGoodsImageList(Collection<GoodsImg> goodsImgList){
+	public void saveGoodsImageList(Collection<GoodsImg> goodsImgList) {
 		int index = 0;
 		for (GoodsImg goodsImg : goodsImgList) {
 			// 상품이미지 전체 삭제
@@ -2662,7 +2657,7 @@ public class TsaGoodsService {
 	 * @since 2020. 12. 21
 	 */
 	@Transactional("shopTxnManager")
-	public void updateFreeGoods(FreeGoods freeGoods){
+	public void updateFreeGoods(FreeGoods freeGoods) {
 
 		freeGoods.setUpdNo(TsaSession.getInfo().getUserNo());
 		goodsDao.updateFreeGoods(freeGoods);
@@ -2699,9 +2694,9 @@ public class TsaGoodsService {
 	 * @since 2021. 01. 05
 	 */
 	@Transactional("shopTxnManager")
-	public void saveFreeGoods(Collection<WmsGoods> wmsGoodsList){
+	public void saveFreeGoods(Collection<WmsGoods> wmsGoodsList) {
 
-		for (WmsGoods wmsGoods: wmsGoodsList) {
+		for (WmsGoods wmsGoods : wmsGoodsList) {
 			FreeGoods freeGoods = new FreeGoods();
 			freeGoods.setProductNo(wmsGoods.getProductNo());
 			freeGoods.setProductCode(wmsGoods.getProductCode());
@@ -2721,4 +2716,26 @@ public class TsaGoodsService {
 		}
 	}
 
+	/**
+	 * 고시분류별 상품고시정보 목록
+	 * @param goodsNotiInfo - 상품고시정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 21
+	 */
+	public Collection<GoodsNotiInfo> getGoodsNotiInfoListByNotiClsf(GoodsNotiInfo goodsNotiInfo) {
+		return goodsDao.getGoodsNotiInfoListByNotiClsf(goodsNotiInfo);
+	}
+
+	/**
+	 * 고시분류 칼럼 정보
+	 * @param niClsfCd - 고시분류코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 21
+	 */
+	public GoodsNotiInfo getNotiClsfColumnInfo(String niClsfCd) {
+		return goodsDao.getNotiClsfColumnInfo(niClsfCd);
+	}
+
 }

+ 0 - 77
src/main/java/com/style24/admin/biz/service/TsaMarketingService.java

@@ -1,77 +0,0 @@
-package com.style24.admin.biz.service;
-
-import java.util.Collection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Service;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.style24.admin.biz.dao.TsaMarketingDao;
-import com.style24.core.biz.thirdparty.NaverLowestPriceApi;
-import com.style24.core.biz.thirdparty.SafetyKoreaApi;
-import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.persistence.domain.FreeGoodsPromotion;
-
-import lombok.extern.slf4j.Slf4j;
-
-/**
- *상품관리 Service
- *
- * @author xodud1202
- * @since 2020. 12. 17
- */
-@Service
-@Slf4j
-public class TsaMarketingService {
-
-	@Autowired
-	private TscMessageByLocale message;
-
-	@Autowired
-	private Environment env;
-
-	@Autowired
-	private TsaMarketingDao marketingDao;
-
-	@Autowired
-	private TsaBusinessService businessService;
-
-	@Autowired
-	private TsaCommonService commonService;
-
-	@Autowired
-	private TsaRendererService rendererService;
-
-	@Autowired
-	private TsaNoticeService noticeService;
-
-	@Autowired
-	private SafetyKoreaApi safetyKoreaApi;
-
-	@Autowired
-	private NaverLowestPriceApi naverLowestPriceApi;
-
-	@Autowired
-	private ObjectMapper mapper;
-
-	private static final String NUMBER_PATTERN = "^[0-9]+$";
-
-	private static final String SELF_GOOODS_AFTER = "STY";
-
-	/* xodud1202 진행 */
-
-	/**
-	 * 사은품 프로모션 리스트
-	 * @param param
-	 * @return
-	 * @author xodud1202
-	 * @since 2020. 12. 17
-	 */
-	public Collection<FreeGoodsPromotion> getFreeGoodsPromotionList(FreeGoodsPromotion param) {
-		return marketingDao.getFreeGoodsPromotionList(param);
-	}
-
-	/* // xodud1202 진행 */
-
-}

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

@@ -11,10 +11,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.gagaframework.web.parameter.GagaMap;
-import com.style24.admin.biz.dao.TsaOrderChangeDao;
 import com.style24.admin.biz.dao.TsaOrderDao;
+import com.style24.admin.biz.dao.TsaOrderChangeDao;
 import com.style24.admin.biz.dao.TsaRefundDao;
 import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.dao.TscOrderChangeDao;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;

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

@@ -488,7 +488,6 @@ public class TsaGoodsController extends TsaBaseController {
 	@ResponseBody
 	public GagaMap getGoodsList(@RequestBody GoodsSearch goodsSearch) {
 
-
 		GagaMap result = new GagaMap();
 
 		// 입점업체담당자는 업체코드 설정
@@ -513,7 +512,7 @@ public class TsaGoodsController extends TsaBaseController {
 		goodsSearch.getPageable().setTotalCount(goodsService.getGoodsListCount(goodsSearch));
 
 		// 다다익선 업체+브랜드 상품조회시 사용
-		if("N".equals(goodsSearch.getPageingYn())){
+		if ("N".equals(goodsSearch.getPageingYn())) {
 			goodsSearch.setPageable(null);
 		}
 
@@ -1056,7 +1055,7 @@ public class TsaGoodsController extends TsaBaseController {
 				String brandYmdDir = GagaFileUtil.getConcatenationPath(brandDir, GagaDateUtil.getToday());	//디비 저장용
 
 				File uniqueFile = GagaFileUtil.getUniqueFile(new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, newFilename)));
-				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath,  uniqueFile.getName()));
+				File newFile = new File(GagaFileUtil.getConcatenationPath(goodsUploadPath, uniqueFile.getName()));
 				log.info("newFile.getPath(): {}", newFile.getPath());
 
 				// resizing 처리 시 오류가 발생할 경우 삭제하기 위해 설정
@@ -1078,11 +1077,11 @@ public class TsaGoodsController extends TsaBaseController {
 				}
 
 				goodsImg.setDispOrd(index++);
-				goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir,newFile.getName()));
-				goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir,newFile.getName()));
+				goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
+				goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(brandYmdDir, newFile.getName()));
 			} else {
-				goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(goodsImg.getSysImgUrl() ,goodsImg.getSysImgNm()));
-				goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(goodsImg.getSysImgUrl() ,goodsImg.getSysImgNm()));
+				goodsImg.setOrgImgNm(GagaFileUtil.getConcatenationPath(goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
+				goodsImg.setSysImgNm(GagaFileUtil.getConcatenationPath(goodsImg.getSysImgUrl(), goodsImg.getSysImgNm()));
 				goodsImg.setDispOrd(index++);
 			}
 		}
@@ -2411,6 +2410,37 @@ public class TsaGoodsController extends TsaBaseController {
 		return mav;
 	}
 
+	/**
+	 * 고시분류별 상품고시정보 목록
+	 * @param goodsNotiInfo - 상품고시정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 21
+	 */
+	@PostMapping("/noti/info/list")
+	@ResponseBody
+	public Collection<GoodsNotiInfo> getGoodsNotiInfoListByNotiClsf(@RequestBody GoodsNotiInfo goodsNotiInfo) {
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(goodsNotiInfo.getGoodsCd())) {
+			goodsNotiInfo.setGoodsCds(goodsNotiInfo.getGoodsCd().replaceAll("\r", "").split("\n"));
+		}
+
+		return goodsService.getGoodsNotiInfoListByNotiClsf(goodsNotiInfo);
+	}
+
+	/**
+	 * 고시분류의 칼럼 목록
+	 * @param niClsfCd - 고시분류코드
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 1. 21
+	 */
+	@GetMapping("/noti/info/column/{niClsfCd}")
+	@ResponseBody
+	public GoodsNotiInfo getNotiClsfColumnInfo(@PathVariable String niClsfCd) {
+		return goodsService.getNotiClsfColumnInfo(niClsfCd);
+	}
+
 	/**
 	 * 사은품 화면
 	 * @return
@@ -2483,7 +2513,7 @@ public class TsaGoodsController extends TsaBaseController {
 	public GagaResponse updateFreeGoods(@RequestBody FreeGoods freeGoods) {
 
 		if (freeGoods.getNewSysImgNm() != null && !"".equals(freeGoods.getNewSysImgNm())) {
-			String sysImgNm =  freeGoods.getProductNo() + "_" + GagaDateUtil.getTodayDateTime() + "." + org.springframework.util.StringUtils.getFilenameExtension(freeGoods.getNewSysImgNm());
+			String sysImgNm = freeGoods.getProductNo() + "_" + GagaDateUtil.getTodayDateTime() + "." + org.springframework.util.StringUtils.getFilenameExtension(freeGoods.getNewSysImgNm());
 
 			String imgUploadPath = env.getProperty("upload.default.target.path");
 			imgUploadPath = GagaFileUtil.getConcatenationPath(imgUploadPath, "display", "freegoods");

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

@@ -22,7 +22,7 @@ import org.springframework.web.servlet.ModelAndView;
 import com.style24.admin.biz.service.TsaBusinessService;
 import com.style24.admin.biz.service.TsaCommonService;
 import com.style24.admin.biz.service.TsaCouponService;
-import com.style24.admin.biz.service.TsaMarketingService;
+import com.style24.admin.biz.service.TsaFreegiftPromotionService;
 import com.style24.admin.biz.service.TsaMorebetterService;
 import com.style24.admin.biz.service.TsaRendererService;
 import com.style24.admin.biz.service.TsaSystemService;
@@ -52,7 +52,7 @@ public class TsaMarketingController extends TsaBaseController {
 	private Environment env;
 
 	@Autowired
-	private TsaMarketingService marketingService;
+	private TsaFreegiftPromotionService freegiftService;
 
 	@Autowired
 	private TsaBusinessService businessService;
@@ -95,14 +95,14 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getFreeGoodsPromotionList(@RequestBody FreeGoodsPromotion param) {
 		GagaMap result = new GagaMap();
 
-		List<FreeGoodsPromotion> marketingList = (ArrayList<FreeGoodsPromotion>)marketingService.getFreeGoodsPromotionList(param);
+		List<FreeGoodsPromotion> freeGoodsList = (ArrayList<FreeGoodsPromotion>)freegiftService.getFreeGoodsPromotionList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TscPageRequest(param.getPageNo() - 1, param.getPageSize()));
-		param.getPageable().setTotalCount(marketingList.size());
+		param.getPageable().setTotalCount(freeGoodsList.size());
 
 		result.set("pageing", param);
-		result.set("freeGoodsList", marketingList);
+		result.set("freeGoodsList", freeGoodsList);
 
 		return result;
 	}
@@ -122,11 +122,44 @@ public class TsaMarketingController extends TsaBaseController {
 		// 상품상태
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
+
 		mav.addObject("param", param);
+
 		mav.setViewName("marketing/FreeGoodsPromotionRegiForm");
 		return mav;
 	}
 
+	/**
+	 * 사은품 프로모션 목록 조회
+	 * @author xodud1202
+	 * @since 2020. 12. 16
+	 */
+	@PostMapping("/freeGoodsPromotion/detail")
+	@ResponseBody
+	public GagaMap getFreeGoodsPromotionDetail(FreeGoodsPromotion param) {
+		return freegiftService.getFreegiftDetailInfo(param);
+	}
+
+	/**
+	 * 사은품 프로모션 등록
+	 * @param param
+	 * @return ModelAndView
+	 * @author xodud1202
+	 * @since 2021. 01. 14
+	 */
+	@ResponseBody
+	@PostMapping("/freeGoodsPromotion/save")
+	public GagaResponse freeGoodsPromotionSave(@RequestBody FreeGoodsPromotion param) {
+		try {
+			freegiftService.saveFreegoodsPromotionInfo(param);
+		} catch(Exception e) {
+			e.printStackTrace();
+			return super.error(message.getMessage("FAIL_0001"));
+		}
+
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+
 	/**
 	 * 사은품 프로모션 등록
 	 * @param param
@@ -135,8 +168,14 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2021. 01. 14
 	 */
 	@ResponseBody
-	@GetMapping("/freeGoodsPromotion/save")
-	public GagaResponse freeGoodsPromotionSave(FreeGoodsPromotion param) {
+	@PostMapping("/freeGoodsPromotion/changeStat")
+	public GagaResponse freeGoodsPromotionChangeStat(@RequestBody FreeGoodsPromotion param) {
+		try {
+			freegiftService.updateFreegoodsPromotionStat(param);
+		} catch(Exception e) {
+			e.printStackTrace();
+			return super.error(message.getMessage("FAIL_0001"));
+		}
 
 		return super.ok(message.getMessage("SUCC_0001"));
 	}

+ 9 - 4
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.style24.admin.biz.service.TsaDeliveryService;
 import com.style24.admin.biz.service.TsaOrderChangeService;
 import com.style24.admin.biz.service.TsaOrderService;
 import com.style24.admin.biz.service.TsaRendererService;
@@ -25,6 +26,7 @@ import com.style24.core.biz.service.TscOrderChangeService;
 import com.style24.core.biz.service.TscOrderRefundService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Order;
 import com.style24.persistence.domain.OrderChange;
 
@@ -60,6 +62,7 @@ public class TsaOrderChangeController extends TsaBaseController {
 	private TscOrderRefundService coreOrderRefundService;
 	
 	/**
+	 * 취소요청 화면
 	 * 취소신청 (NAPY, 외부몰) (배치)
 	 * @param OrderChange - 주문취소신청정보
 	 * @return
@@ -424,13 +427,15 @@ public class TsaOrderChangeController extends TsaBaseController {
 
 		Collection<Order> orderInfoList = orderService.getOrderInfoList(order);
 
-		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G686"));	// 반품사유
-		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 반품요청대상 목록
+		mav.addObject("chgReasonList"				, rendererService.getAvailCommonCodeList("G689"));	// 교환사유
+		mav.addObject("cancelRequestTargetList"		, cancelRequestTargetList);							// 교환요청대상 목록
 		mav.addObject("orderInfoList"				, orderInfoList);									// 주문정보
 		mav.addObject("ordNo"						, ordNo);
-		mav.addObject("orderDelvRtnAddrInfo"		, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("orderDelvAddrInfo"			, orderService.getDeliveryAddrList(order));			// 배송정보
+		mav.addObject("TelExcNoList"				, rendererService.getAvailCommonCodeList("G095"));	// 전화번호국번
+		mav.addObject("PhnExcNoList"				, rendererService.getAvailCommonCodeList("G096"));	// (휴대전화)번호국번
 
-		mav.setViewName("order/ReturnRequestForm");
+		mav.setViewName("order/ExchangeRequestForm");
 
 		return mav;
 	}

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

@@ -298,4 +298,17 @@ public class Delivery extends TscBaseDomain {
 
 	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
 	private String[] multiOrdDtlStat = null;
+	
+	// 출고처 정보
+	private String delvAssignGrade;
+	private String stockApplRate;
+	private String delvLocZipcode;
+	private String delvLocBaseAddr;
+	private String delvLocDtlAddr;
+	private String rtnLocZipcode;
+	private String rtnLocBaseAddr;
+	private String rtnLocDtlAddr;
+	private String rtnLocTelno;
+	private String rtnLocNm;
+	private String invoicePrintType;
 }

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

@@ -5,6 +5,8 @@ import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -17,33 +19,69 @@ import java.util.List;
 @Data
 public class FreeGoodsPromotion extends TscBaseDomain {
 	// 사은품 프로모션
-	private int freeGiftSq;				// 프로모션ID
-	private String freeGiftName;		// 프로모션명
-	private String freeGiftStat;		// 프로모션 상태
-	private String freeGiftStdt;		// 프로모션 시작일
-	private String freeGiftEddt;		// 프로모션 종료일
+	private int freegiftSq;				// 프로모션ID
+	private String freegiftNm;			// 프로모션명
+	private String freegiftStat;		// 프로모션 상태
+	private String freegiftStdt;		// 프로모션 시작일
+	private String freegiftEddt;		// 프로모션 종료일
 	private String selfYn;				// 자사몰 적용 여부
 	private String allYn;				// 모두 지급 구분 (모두지급 일때는 포인트 금액을 설정 할 수 없음 Y(모두지급), N(선택사은품))
+	private String freegiftStatNm;		// 프로모션 상태명
+
+	// 사은품 프로모션 섹션정보
+	private int freegiftSectionSq;		// 사은품 지급 조건 section 번호
+	private int sectionVal;				// 사은품조건1 구매금액 조건
+	private int sectionVal2;			// 사은품조건2 구매금액 조건
+	private String sectionGb;			// 사은품 프로모션 구간 설정 구분값 (G810_10|수량, G810_11|금액)
 
 	// 사은품 프로모션 제휴몰
 	private int freegiftExtmallSq;		// 프로모션 제휴몰 ID
+	private String extmallYn;			// 제휴몰 여부
 	private String extmallId;			// 외부몰ID
 	private String vendorId;			// 벤더ID
+	private String extmallNm;			// 외부몰명
+
+	// 사은품 프로모션 공급업체
+	private String supplyCompCd;		// 업체코드
+	private String supplyCompNm;		// 업체명
+
+	// 사은품 프로모션 브랜드
+	private String brandCd;				// 브랜드코드
+	private String brandKnm;			// 브랜드국문명
+	private String brandEnm;			// 브랜드국문명
 
 	// 사은품 프로모션 적용 및 제외 상품
 	private String goodsGb;				// 상품 구분 (G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL)
+	private String goodsCd;				// 상품 코드
+	private String goodsNm;				// 상품명
+	private String goodsStat;			// 상품상태
 	private String targetGb;			// 적용 구분 (G260_10|상품, G260_12|브랜드, G260_13|공급처)
 	private String targetVal;			// 적용 값 (브랜드코드, 상품코드, 공급처코드)
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)	private String[] applyGoodsCds;		// 적용 상품 번호
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)	private String[] exceptGoodsCds;	// 제외 상품 번호
+	private int listPrice;
+	private int currPrice;
+
+
+	// 사은품 프로모션 사은품 조건
+	private String itemCd;				// 사은품 번호
+	private int usePoint;				// 포인트액
+	private int limitQty;				// 한정수량
+	private int itemQty;				// 지급수량
+	private int leftQty;				// 남은 수량
 
-	// 사은품 조건
-	private List<FreeGoodsSectionVal> goodsListNew;		// 사은품 조건 리스트
+	List<SupplyCompany> supplyCompList;	// 공급업체 리스트
+	List<Brand> brandList;				// 브랜드 리스트
+	List<Extmall> extmallList;			// 제휴몰 리스트
+	List<Goods> applyGoodsList;			// 적용 상품 리스트
+	List<Goods> exceptGoodsList;		// 제외 상품 리스트
+	List<FreeGoodsSectionVal> freeGoods1;	// 지급 사은품 리스트1
+	List<FreeGoodsSectionVal> freeGoods2;	// 지급 사은품 리스트2
 
 	// 기타 조건
 	private String promotionGubun;		// 프로모션 조회 검색 구분
 	private String searchTxt;			// 프로모션 검색 조건
 	private String gbn;					// 팝업 구분 : C=등록, U=수정
+	private String stDate;				// 검색 기간 조건 시작일
+	private String edDate;				// 검색 기간 조건 종료일
 
 	// Pagination
 	private TscPageRequest pageable;

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

@@ -19,10 +19,12 @@ public class FreeGoodsSectionVal {
 	private int itemQty;				// 지급 수량
 	private int limitQty;				// 한정 수량
 	private int leftQty;				// 잔여 수량
-	private String sectionGb;			// 사은품 조건 구분(G810_10|수량, G810_11|금액)
-	private String sectionVal;				// 구간 설정 값 | 구간 할인 시작 (수량이상, 금액이상)
+	private int productNo;				// 사은품 코드
+	private String sectionGb;			// 사은품 조건 구분(G810_10|수량, G810_11|금액) > 수량은 기획서 상 조건 없음.
+	private String sectionVal;			// 구간 설정 값 | 구간 할인 시작 (수량이상, 금액이상)
 	private String productCd;			// 사은품 코드
 	private String itemCd;				// 사은품ID
 	private String itemOptCd1;			// ??
 	private String itemOptCd2;			// ??
+	private String goodsNm;				// 사은품명
 }

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 
 import lombok.Data;
@@ -25,4 +26,24 @@ public class GoodsNotiInfo extends TscBaseDomain {
 	private String niItemNm;
 	private String supplyVendorCd;
 
+	// 상품고시정보조회에서 사용
+	private String goodsNm;
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] goodsCds;
+	private String col1;
+	private String col2;
+	private String col3;
+	private String col4;
+	private String col5;
+	private String col6;
+	private String col7;
+	private String col8;
+	private String col9;
+	private String col10;
+	private String col11;
+	private String col12;
+	private String col13;
+	private String col14;
+	private int colCnt;
+
 }

+ 403 - 0
src/main/java/com/style24/persistence/domain/Order.java

@@ -0,0 +1,403 @@
+package com.style24.persistence.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.style24.persistence.TscBaseDomain;
+
+import com.style24.persistence.TscPageRequest;
+import lombok.Data;
+
+/**
+ * 주문 Domain
+ *
+ * @author jsh77b
+ * @since 2020. 11. 16
+ */
+@SuppressWarnings("serial")
+@Data
+public class Order extends TscBaseDomain {
+	
+	// 주문마스터
+	private int ordNo;
+	private String mallGb;
+	private String mallGbNm;
+	private String ordDt;
+	private String payDt;
+	private int custNo;
+	private String ordNm;
+	private String ordTelno;
+	private String siteCd;
+	private String siteCdNm;
+	private int npayOrdNo;
+	private String frontGb;
+	private String frontGbNm;
+	private String extmallNm;
+
+	// 주문상세
+	private int ordDtlNo;
+	private String ordExchGb;
+	private String ordDtlStat;
+	private int orgOrdDtlNo;
+	private String supplyCompCd;
+	private String goodsCd;
+	private String formalGb;
+	private String formalGbNm;
+	private String goodsType;
+	private int listPrice;
+	private int currPrice;
+	private double dcRate;
+	private int optAddPrice;
+	private int ordQty;
+	private int ordAmt;
+	private int cnclRtnQty;
+	private int cnclRtnAmt;
+	private int cpn1CpnSq;
+	private int cpn1DcAmt;
+	private int tmtb1Sq;
+	private int tmtb1DcAmt;
+	private int tmtb2Sq;
+	private int tmtb2DcAmt;
+	private int goodsCpnSq;
+	private int goodsCpnDcAmt;
+	private int cartCpnSq;
+	private int cartCpnDcAmt;
+	
+	private int pntDcAmt;
+	private int prePntDcAmt;
+	private int savePntAmt;
+	
+	private int realOrdAmt;
+	private String venderId;
+	private String extmallId;
+	private String agentOrderId;
+	private String extmallOrderId;
+	private String changeableYn;
+	private String changeFeeFreeYn;
+	private String returnableYn;
+	private String returnFeeFreeYn;
+	
+	private String soldoutYn;
+	private String soldoutMemo;
+	private String soldoutRegNo;
+	private String soldoutRegDt;
+	private int delvAddrSq;
+	private String shotDelvYn;
+	private String giftPackYn;
+	
+	private String delvLocCd;
+	private String delvAssigngDt;
+	private String delvAddignStat;
+	private String dstrbtMemo;
+	private String delvStdt;
+	private String delvEddt;
+	
+	private String shipCompCd;
+	private String invoiceNo;
+	private String invoiceSendYn;
+	private String sellStoreCd;
+	private double sellFeeRate;
+	
+	private String afLinkCd;
+	private String ithrCd;
+	private String contentsLoc;
+	
+	private int planDtlsq;
+	private int socialSq;
+	
+	private String condition;
+	private String[] conditions = null;
+	
+	private String stDate;
+	private String edDate;
+	private String searchDateGb;
+	private String orderNm;
+	private int custId;
+	private String orderPhnno;
+	private String vendorId;
+	private String sizeCd;
+	private String goodsNm;
+	private String payMeans;
+	private String chgStat;
+	private String recipNm;
+	private String chgGb;
+	private String wdInvoiceSendYn;
+	
+	// 상품정보
+	private String imgPath1;
+	private String sysImgNm;
+	private String brandCd;
+	private String optCd1;
+	private String optCd2;
+	private String goodsTypeNm;
+	private String brandEnm;
+	private String itemCd;
+	private String goodsNum;
+	private String supplyGoodsCd;
+	private String optCd2s;
+	private int currStockQty;
+	private String currStockQtys;
+	
+	private int totDcAmt;
+	private String dateGbn;
+	private String mallCd;
+	private String search;
+	
+	/* Multi CheckBox 항목*/
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiBrand;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdStat;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] multiOrdDtlStat;
+	
+	private int sumOrdAmt;
+	private int sumOrdCnclAmt;
+	private int sumRealPayAmt;
+	private int ordNoCnt;
+	private int sumOrdQty;
+	private int sumOrdCnclQty;
+	
+	private String excelFileNm;
+	
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private int[] ordNoList;
+	
+	private String delYn;
+	private String recipPhnno;
+	private String recipTelno;
+	private String recipZipNo;
+	private String recipBaseAddr;
+	private String recipDtlAddr;
+	private String ordEmail;
+	private String delvMemo;
+	private String delvAddrEditYn;
+	private String exchGbNm;
+	
+	private String escrowYn;
+	private String payMeansNm;
+	private String cardNm;
+	private String vaBank;
+	private String pgTradeNo;
+	private String payStat;
+	private String payStatNm;
+	private int payAmt;
+	private String vaDeadLine;
+	
+	private String delvFeeGb;
+	private String delvFeeGbNm;
+	private int delvFee;
+	private String delvUsacYn;
+	private String delvUsacDt;
+	private int delvFeeSq;
+	
+	private String coundelClsf;
+	private String relGoodsCd;
+	private String questTitle;
+	private String questDt;
+	private String ansDt;
+	private int andNo;
+	
+	private int ordChgSq;
+	private String chgGbNm;
+	private String chgStatNm;
+	private String chgReason;
+	private String chgReasonNm;
+	private String chgMemo;
+	private String chgerNm;
+	private String chgerPhnno;
+	private String chgerZipNo;
+	private String chgerBaseAddr;
+	private String chgerDtlAddr;
+	private String wdInvoiceNo;
+	
+	private String supplyCompNm;
+	private String brandKnm;
+	private String ordDtlStatNm;	
+	private String ordPhnno;
+	
+	private String custGrade;
+	private String custGradeNm;
+	private String custGb;
+	private String custGbNm;
+	private String managedRsn;
+	private String managedRsnNm;
+	
+	private int itemQty;
+	private int itemPrice;
+	private String itemNm;
+	private int gfcdUseAmt;
+	
+	// Pagination
+	private TscPageRequest pageable;
+	private int pageNo = 1;
+	private int pageSize = 50;
+	private int pageUnit = 10;
+	
+	// 주문문의 1:1 응답 칼럼
+	private String counselClsfNm;
+	private String ansNo;
+	private String ansNm;
+	private String regNm;
+	private String updNm;
+	
+	// 주문메모칼럼
+	private int orderMemoSq;
+	private String memo;
+	private String orgFileNm;
+	private String sysFileNm;
+	
+	// 사은품칼럼
+	private int ordFreegiftSq;
+	private int freegiftSq;
+	private String freegiftNm;
+	private int freegiftValSq;
+	private int usePoint;
+	private int seq;
+	private String userNm;
+	
+	// 환불계좌칼럼
+	private String raBank;
+	private String raBankNm;
+	private String raNo;
+	private String raNm;
+	private String defaultYn;
+	
+	// 주문상세변경내역칼럼
+	private String userId;
+	private String updId;
+	private String shipCompNm;
+	private String shipCompId;
+	
+	// 주문쿠폰
+	private int cpnSq;
+	private int cpnId;
+	private int cpnDcAmt;
+	private String cpnType;
+	private String targetCd1;
+	private String targetCd2;
+	private String cpnNm;
+	private String dcWay;
+	private int dcPval;
+	private int dcMval;
+	private int dcAval;
+	
+	// 주문포인트
+	private int pntPrate;
+	private int pntMrate;
+	private int pntAmt;
+	private String occurGb;
+	private String occurGbNm;
+	private String occurDtlDesc;
+	
+	// 주문상품권
+	private String gfcdNm;
+	private String gfcdNo;
+	private int gfcdAmt;
+	private int chgGfcdAmt;
+	private int usGfcdAmt;
+	private int rmGfcdAmt;
+	
+	// 다다익선
+	private int tmtbSq;
+	private String tmtbNm;
+	private int tmtbDcAmt;
+	
+	// 상태변경
+	private String g20;
+	private String g30;
+	private String g40;
+	private String g50;
+	private String g55;
+	private String g60;
+	
+	// 취소요청
+	private String cncWait;
+	private int ordReqChgQty;
+	private int itemReqChgQty;
+	private int itemOrdPrice;
+	private int minOrdAmt;
+	private int orgDelvFee;
+	private String delvFeeCd;
+	private int ordCanChgQty;
+	private String allCanYn;
+	
+	private String addDelvFeeYn;
+	private int addDelvFee;
+	private int ordDtlItemSq;
+	
+	private int paySq;
+	private int refundAmt;
+	private int rfCpn1Amt;
+	private int rfTmtb1Amt;
+	private int rfTmtb2Amt;
+	private int rfGoodsCpnAmt;
+	private int rfCartCpnAmt;
+	private int rfPntAmt;
+	private int rfPrePntAmt;
+	private int rfGfcdUseAmt;
+
+	private int pgCpnAmt;
+	private int npayPntAmt;
+	private String payGb;
+	private String pgGb;
+	private String pgTid;
+	private String cardType;
+	private String cardKind;
+	private String cardBank;
+	private String cardMips;
+	private String cardPcableYn;
+	private String vaNo;
+	private String vaNm;
+	private String vaDeadline;
+	private String telecom;
+
+	private String accountNo;
+	private String accountNm;
+	private String bankCd;
+	private String bankNm;
+
+	private int realDelvAmt;
+	private int delvCpnSq;
+	private int delvCpnDcAmt;
+
+	private int chgQty;
+	private int rtnDelvFee;
+	private int excDelvFee;
+
+	private String[] ordDtlStatArr;
+	
+	// 교환요청
+	private String ordChgOpt;
+	private String rtnLocZipcode;
+	private String rtnLocBaseAddr;
+	private String rtnLocDtlAddr;
+	private String rtnLocTelno;
+	private String rtnLocNm;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

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

@@ -400,5 +400,4 @@
 		/* TsaDelivery.getDeliveryWithdrawDirectiveList */
 		SELECT '1' FROM DUAL
 	</select>
-	
 </mapper>

+ 379 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaFreegiftPromotion.xml

@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.admin.biz.dao.TsaFreegiftPromotionDao">
+	<!-- 사은품 프로모션 리스트 조회 -->
+	<select id="getFreeGoodsPromotionList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
+		/* TsaMarketing.getFreeGoodsPromotionList :  사은품 프로모션 리스트 조회 */
+		SELECT FG.FREEGIFT_SQ
+			 , FG.FREEGIFT_NM
+			 , FG.FREEGIFT_STAT
+		     , (SELECT CD_NM FROM TB_COMMON_CODE WHERE CD = FG.FREEGIFT_STAT) AS FREEGIFT_STAT_NM
+		     , FG.SELF_YN
+			 , DATE_FORMAT(FG.FREEGIFT_STDT, '%Y.%m.%d') AS FREEGIFT_STDT
+			 , DATE_FORMAT(FG.FREEGIFT_EDDT, '%Y.%m.%d') AS FREEGIFT_EDDT
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.REG_NO) AS REG_NM
+			 , DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
+			 , DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		  FROM TB_FREEGIFT FG
+		 WHERE 1=1
+		   AND DEL_YN = 'N'
+		<if test="searchTxt != null and searchTxt != ''">
+			<if test="promotionGubun != null and promotionGubun == 'freegiftSq'">
+		   AND FG.FREEGIFT_SQ = #{searchTxt}
+			</if>
+			<if test="promotionGubun != null and promotionGubun == 'freegiftNm'">
+		   AND FG.FREEGIFT_NM = #{searchTxt}
+			</if>
+		</if>
+		/* 프로모션ID로 검색하면 기간보다 우선하여 검색한다 */
+		<if test="searchTxt == '' or promotionGubun != 'freegiftSq'">
+			<if test="stDate != null and stDate != ''">
+				<if test="edDate != null and edDate != ''">
+			   AND FREEGIFT_STDT BETWEEN STR_TO_DATE(#{stDate},'%Y-%m-%d%H%i%S') AND STR_TO_DATE(CONCAT(#{edDate}, '235959'),'%Y-%m-%d%H%i%S')
+			   AND FREEGIFT_EDDT BETWEEN STR_TO_DATE(#{stDate},'%Y-%m-%d%H%i%S') AND STR_TO_DATE(CONCAT(#{edDate}, '235959'),'%Y-%m-%d%H%i%S')
+				</if>
+			</if>
+		</if>
+		<if test="freegiftSq != null and freegiftSq != ''">
+		   AND FG.FREEGIFT_SQ = #{freegiftSq}
+		</if>
+		 ORDER BY REG_DT DESC
+	</select>
+
+	<!-- 사은품 프로모션 제휴몰 리스트 조회 -->
+	<select id="getFreegiftExtmallList" parameterType="FreeGoodsPromotion" resultType="Extmall">
+		/* TsaMarketing.getFreegiftExtmallList : 사은품 프로모션 제휴몰 리스트 조회 */
+		SELECT FE.FREEGIFT_EXTMALL_SQ
+		     , FE.FREEGIFT_SQ
+		     , FE.EXTMALL_ID
+		     , FE.VENDOR_ID
+		     , (SELECT EXTMALL_NM FROM TB_EXTMALL WHERE EXTMALL_ID = FE.EXTMALL_ID AND VENDOR_ID = FE.VENDOR_ID) AS EXTMALL_NM
+		     , FE.DEL_YN
+		     , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FE.REG_NO) AS REG_NM
+			 , DATE_FORMAT(FE.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+		     , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FE.UPD_NO) AS UPD_NM
+		     , DATE_FORMAT(FE.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		  FROM TB_FREEGIFT_EXTMALL FE
+		 WHERE 1=1
+		   AND DEL_YN = 'N'
+		<if test="freegiftSq != null and freegiftSq != ''">
+		   AND FE.FREEGIFT_SQ = #{freegiftSq}
+		</if>
+		ORDER BY EXTMALL_ID ASC
+	</select>
+
+	<!-- 사은품 프로모션 공급업체 리스트 조회 -->
+	<select id="getFreegiftSupplyCompList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
+		/* TsaMarketing.getFreegiftSupplyCompList : 사은품 프로모션 공급업체 리스트 조회 */
+		SELECT FG.FREEGIFT_GOODS_SQ
+		     , FG.FREEGIFT_SQ
+		     , FG.GOODS_GB
+		     , FG.TARGET_GB
+		     , FG.TARGET_VAL
+		     , SC.SUPPLY_COMP_CD
+		     , SC.SUPPLY_COMP_NM
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.REG_NO) AS REG_NM
+			 , DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
+			 , DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		  FROM TB_FREEGIFT_GOODS FG
+		 INNER JOIN TB_SUPPLY_COMPANY SC
+		    ON SC.SUPPLY_COMP_CD = FG.TARGET_VAL
+		 WHERE 1=1
+		   AND DEL_YN = 'N'
+		   AND FG.GOODS_GB = 'G800_20'			/* G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL */
+		   AND FG.TARGET_GB = 'G260_13'			/* G260_10|상품, G260_12|브랜드, G260_13|공급처 */
+		   AND FG.FREEGIFT_SQ =	#{freegiftSq}		/* 사은품 프로모션 번호 */
+		ORDER BY TARGET_VAL ASC
+	</select>
+
+	<!-- 사은품 프로모션 브랜드 리스트 조회 -->
+	<select id="getFreegiftBrandList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
+		/* TsaMarketing.getFreegiftBrandList : 사은품 프로모션 브랜드 리스트 조회 */
+		SELECT FG.FREEGIFT_GOODS_SQ
+			 , FG.FREEGIFT_SQ
+			 , FG.GOODS_GB
+			 , FG.TARGET_GB
+			 , FG.TARGET_VAL
+		     , B.BRAND_CD
+		     , B.BRAND_KNM
+		     , B.BRAND_ENM
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.REG_NO) AS REG_NM
+			 , DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
+			 , DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		 FROM TB_FREEGIFT_GOODS FG
+	    INNER JOIN TB_BRAND B
+		   ON B.BRAND_CD = FG.TARGET_VAL
+	    WHERE 1=1
+		  AND DEL_YN = 'N'
+		  AND FG.GOODS_GB =	'G800_20'			/* G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL */
+		  AND FG.TARGET_GB = 'G260_12'			/* G260_10|상품, G260_12|브랜드, G260_13|공급처 */
+		  AND FG.FREEGIFT_SQ =	#{freegiftSq}	/* 사은품 프로모션 번호 */
+	    ORDER BY TARGET_VAL ASC
+	</select>
+
+	<!-- 사은품 프로모션 상품 리스트 조회 -->
+	<select id="getFreegiftGoodsList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
+		/* TsaMarketing.getFreegiftApplyGoodsList : 사은품 프로모션 적용 상품 리스트 조회 */
+		SELECT FG.FREEGIFT_GOODS_SQ
+			 , FG.FREEGIFT_SQ
+			 , FG.GOODS_GB
+			 , FG.TARGET_GB
+			 , FG.TARGET_VAL
+			 , G.GOODS_CD
+		     , (SELECT BRAND_ENM FROM TB_BRAND WHERE BRAND_CD = G.BRAND_CD) AS BRAND_ENM
+		     , G.BRAND_CD
+		     , G.GOODS_NM
+		     , G.GOODS_STAT
+		     , G.LIST_PRICE
+		     , G.CURR_PRICE
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.REG_NO) AS REG_NM
+			 , DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+			 , (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
+			 , DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		FROM TB_FREEGIFT_GOODS FG
+		INNER JOIN TB_GOODS G
+		ON G.GOODS_CD = FG.TARGET_VAL
+		WHERE DEL_YN = 'N'
+		AND FG.TARGET_GB = 'G260_10'		/* G260_10|상품, G260_12|브랜드, G260_13|공급처 */
+		AND FG.GOODS_GB = #{goodsGb}		/* G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL */
+		AND FG.FREEGIFT_SQ = #{freegiftSq}	/* 사은품 프로모션 번호 */
+		ORDER BY TARGET_VAL ASC
+	</select>
+
+	<!-- 사은품 프로모션 섹션정보 리스트 조회 -->
+	<select id="getFreegiftSectionList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
+		/* TsaMarketing.getFreegiftSectionList : 사은품 프로모션 섹션정보 리스트 조회 */
+		SELECT FC.FREEGIFT_SECTION_SQ
+		     , FC.SECTION_GB
+		     , FC.SECTION_VAL
+		FROM   TB_FREEGIFT_SECTION FC
+		WHERE  FC.DEL_YN = 'N'
+		AND    FC.FREEGIFT_SQ = #{freegiftSq}	/* 사은품 프로모션 번호 */
+		ORDER BY FC.FREEGIFT_SECTION_SQ ASC
+	</select>
+
+	<!-- 사은품 프로모션 섹션정보 리스트 조회 -->
+	<select id="getFreegiftFreegoodsList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsSectionVal">
+		/* TsaMarketing.getFreegiftFreegoodsList : 사은품 프로모션 등록 사은품 리스트 조회 */
+		SELECT FV.FREEGIFT_SECTION_SQ
+		     , FV.USE_POINT
+		     , FV.ITEM_QTY
+		     , FV.LIMIT_QTY
+		     , FV.ITEM_CD
+			 , FG.PRODUCT_NO
+			 , FG.GOODS_NM
+		FROM TB_FREEGIFT_VAL FV
+		INNER JOIN TB_FREE_GOODS FG
+		ON FV.ITEM_CD = FG.PRODUCT_NO
+		WHERE FV.DEL_YN = 'N'
+		AND FV.FREEGIFT_SQ = #{freegiftSq}					/* 사은품 프로모션 번호 */
+		AND FV.FREEGIFT_SECTION_SQ = #{freegiftSectionSq}	/* 사은품 프로모션 섹션 번호 */
+		ORDER BY FV.FREEGIFT_SECTION_SQ, FV.ITEM_CD
+	</select>
+
+	<!-- 사은품 프로모션 마스터 정보 저장 -->
+	<insert id="createFreegoodsPromotionInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.createFreegoodsPromotionInfo : 사은품 프로모션 마스터 정보 저장 */
+		<selectKey keyProperty="freegiftSq" resultType="int" order="AFTER">
+			SELECT LAST_INSERT_ID()
+		</selectKey>
+		INSERT INTO TB_FREEGIFT (
+			  FREEGIFT_NM
+			, FREEGIFT_STAT
+			, FREEGIFT_STDT
+			, FREEGIFT_EDDT
+			, SELF_YN
+			, ALL_YN
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{freegiftNm}
+			, #{freegiftStat}
+			, STR_TO_DATE(#{freegiftStdt},'%Y%m%d%H%i%S')
+			, STR_TO_DATE(CONCAT(#{freegiftEddt}, '235959'),'%Y%m%d%H%i%S')
+			, #{selfYn}
+			, #{allYn}
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		)
+	</insert>
+
+	<!-- 사은품 프로모션 제휴몰 정보 저장 -->
+	<insert id="createFreegiftExtmallInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.createFreegiftExtmallInfo : 사은품 프로모션 제휴몰 정보 저장 */
+		INSERT INTO TB_FREEGIFT_EXTMALL (
+			  FREEGIFT_SQ
+			, EXTMALL_ID
+			, VENDOR_ID
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{freegiftSq}
+			, #{extmallId}
+			, #{vendorId}
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		)
+	</insert>
+
+	<!-- 사은품 프로모션 대상 정보 저장 -->
+	<insert id="createFreegiftGoodsInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.createFreegiftGoodsInfo : 사은품 프로모션 대상 정보 저장 */
+		INSERT INTO TB_FREEGIFT_GOODS (
+			  FREEGIFT_SQ
+			, GOODS_GB
+			, TARGET_GB
+			, TARGET_VAL
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{freegiftSq}
+			, #{goodsGb}
+			, #{targetGb}
+			, #{targetVal}
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		 )
+	</insert>
+
+	<!-- 사은품 지급 조건 -->
+	<insert id="createFreegiftSectionInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.createFreegiftSectionInfo : 사은품 지급 조건 저장 */
+		<selectKey keyProperty="freegiftSectionSq" resultType="int" order="AFTER">
+			SELECT LAST_INSERT_ID()
+		</selectKey>
+		INSERT INTO TB_FREEGIFT_SECTION (
+			  FREEGIFT_SQ
+			, SECTION_GB
+			, SECTION_VAL
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{freegiftSq}
+			, #{sectionGb}
+			, #{sectionVal}
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		)
+	</insert>
+
+	<!-- 사은품 프로모션 지급 사은품 저장 -->
+	<insert id="createPromotionFreeGoodsInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.createPromotionFreeGoodsInfo : 사은품 프로모션 지급 사은품 저장 */
+		INSERT INTO TB_FREEGIFT_VAL (
+			  FREEGIFT_SQ
+			, FREEGIFT_SECTION_SQ
+			, USE_POINT
+			, ITEM_QTY
+			, ITEM_CD
+			, LIMIT_QTY
+			, LEFT_QTY
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{freegiftSq}
+			, #{freegiftSectionSq}
+			, #{usePoint}
+			, #{itemQty}
+			, #{itemCd}
+			, #{limitQty}
+			, #{leftQty}
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		)
+	</insert>
+
+	<!-- 사은품 프로모션 마스터 정보 수정 -->
+	<update id="updateFreegoodsPromotionInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.updateFreegoodsPromotionInfo : 사은품 프로모션 마스터 정보 수정 */
+		UPDATE TB_FREEGIFT
+        SET FREEGIFT_STDT = STR_TO_DATE(#{freegiftStdt},'%Y%m%d%H%i%S')
+          , FREEGIFT_EDDT = STR_TO_DATE(CONCAT(#{freegiftEddt}, '235959'),'%Y%m%d%H%i%S')
+          , FREEGIFT_NM = #{freegiftNm}
+		  , SELF_YN = #{selfYn}
+		  , ALL_YN = #{allYn}
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = CURRENT_TIMESTAMP
+		WHERE FREEGIFT_SQ = #{freegiftSq}
+	</update>
+
+	<!-- 사은품 프로모션 제휴몰 정보 삭제  -->
+	<update id="deleteFreegiftExtmallInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.deleteFreegiftExtmallInfo : 사은품 프로모션 제휴몰 정보 삭제 */
+		UPDATE TB_FREEGIFT_EXTMALL SET
+			  DEL_YN = 'Y'
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE FREEGIFT_SQ = #{freegiftSq}
+		  AND DEL_YN = 'N'
+	</update>
+
+	<!-- 사은품 적용 업체/브랜드/상품 제외상품 정보 삭제  -->
+	<delete id="deleteFreegiftGoodsInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.deleteFreegiftSupplyCompInfo : 사은품 적용 업체/브랜드/상품 제외상품 정보 삭제 */
+		UPDATE TB_FREEGIFT_GOODS SET
+			 DEL_YN = 'Y'
+		   , UPD_NO = #{updNo}
+		   , UPD_DT = CURRENT_TIMESTAMP
+		WHERE FREEGIFT_SQ = #{freegiftSq}
+		  AND DEL_YN = 'N'
+	</delete>
+
+	<!-- 사은품 적용 조건 정보 삭제  -->
+	<delete id="deleteFreegiftSectionInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.deleteFreegiftSectionInfo : 사은품 적용 조건 정보 삭제 */
+		UPDATE TB_FREEGIFT_SECTION SET
+			DEL_YN = 'Y'
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = CURRENT_TIMESTAMP
+		WHERE FREEGIFT_SQ = #{freegiftSq}
+		  AND DEL_YN = 'N'
+	</delete>
+
+	<!-- 사은품 프로모션 지급 사은품 정보 삭제 -->
+	<delete id="deleteFreegiftValInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.deleteFreegiftValInfo : 사은품 프로모션 지급 사은품 정보 삭제 */
+		UPDATE TB_FREEGIFT_VAL SET
+			DEL_YN = 'Y'
+		  , UPD_NO = #{updNo}
+		  , UPD_DT = CURRENT_TIMESTAMP
+		WHERE FREEGIFT_SQ = #{freegiftSq}
+		  AND DEL_YN = 'N'
+	</delete>
+
+	<!-- 사은품 프로모션 상태 수정 -->
+	<update id="updateFreegoodsPromotionStat" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.updateFreegoodsPromotionStat : 사은품 프로모션 상태 수정 */
+		UPDATE TB_FREEGIFT SET
+			  FREEGIFT_STAT = #{freegiftStat}
+		<if test="freegiftStat == 'G232_14'">
+			, DEL_YN = 'Y'
+		</if>
+			, UPD_NO = #{updNo}
+			, UPD_DT = CURRENT_TIMESTAMP
+		WHERE FREEGIFT_SQ = #{freegiftSq}
+	</update>
+</mapper>

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

@@ -3782,4 +3782,71 @@
 		WHERE PRODUCT_NO = #{productNo}
 	</update>
 	
+	<!-- 고시분류별 상품고시정보 목록 -->
+	<select id="getGoodsNotiInfoListByNotiClsf" parameterType="GoodsNotiInfo" resultType="GoodsNotiInfo">
+		/* TsaGoods.getGoodsNotiInfoListByNotiClsf */
+		SELECT A.GOODS_CD
+		     , MAX(B.GOODS_NM)                                          AS GOODS_NM
+		     , MAX(CASE WHEN A.RK =  1 THEN A.NI_CONTENT ELSE NULL END) AS COL1
+		     , MAX(CASE WHEN A.RK =  2 THEN A.NI_CONTENT ELSE NULL END) AS COL2
+		     , MAX(CASE WHEN A.RK =  3 THEN A.NI_CONTENT ELSE NULL END) AS COL3
+		     , MAX(CASE WHEN A.RK =  4 THEN A.NI_CONTENT ELSE NULL END) AS COL4
+		     , MAX(CASE WHEN A.RK =  5 THEN A.NI_CONTENT ELSE NULL END) AS COL5
+		     , MAX(CASE WHEN A.RK =  6 THEN A.NI_CONTENT ELSE NULL END) AS COL6
+		     , MAX(CASE WHEN A.RK =  7 THEN A.NI_CONTENT ELSE NULL END) AS COL7
+		     , MAX(CASE WHEN A.RK =  8 THEN A.NI_CONTENT ELSE NULL END) AS COL8
+		     , MAX(CASE WHEN A.RK =  9 THEN A.NI_CONTENT ELSE NULL END) AS COL9
+		     , MAX(CASE WHEN A.RK = 10 THEN A.NI_CONTENT ELSE NULL END) AS COL10
+		     , MAX(CASE WHEN A.RK = 11 THEN A.NI_CONTENT ELSE NULL END) AS COL11
+		     , MAX(CASE WHEN A.RK = 12 THEN A.NI_CONTENT ELSE NULL END) AS COL12
+		     , MAX(CASE WHEN A.RK = 13 THEN A.NI_CONTENT ELSE NULL END) AS COL13
+		     , MAX(CASE WHEN A.RK = 14 THEN A.NI_CONTENT ELSE NULL END) AS COL14
+		FROM   (
+		        SELECT GOODS_CD
+		             , NI_ITEM_CD
+		             , NI_CONTENT
+		             , RANK() OVER(PARTITION BY GOODS_CD ORDER BY NI_ITEM_CD) AS RK /*정렬순서 중요함. 변경하지 마세요.*/
+		        FROM   TB_GOODS_NOTI_INFO
+		        WHERE  NI_CLSF_CD = #{niClsfCd}
+		        <if test="goodsCds != '' and goodsCds != ''">
+		        AND    (
+		                <foreach collection="goodsCds" item="item" index="index" separator="or">
+		                UPPER(GOODS_CD) LIKE CONCAT('%',UPPER(#{item}),'%') 
+		                </foreach>
+		               )
+		        </if>
+		       ) A
+		     , TB_GOODS B
+		WHERE  A.GOODS_CD = B.GOODS_CD
+		GROUP  BY A.GOODS_CD
+		ORDER  BY A.GOODS_CD
+	</select>
+	
+	<!-- 고시분류 칼럼 정보 -->
+	<select id="getNotiClsfColumnInfo" parameterType="String" resultType="GoodsNotiInfo">
+		/* TsaGoods.getNotiClsfColumnInfo */
+		SELECT MAX(CASE WHEN RK =  1 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL1
+		     , MAX(CASE WHEN RK =  2 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL2
+		     , MAX(CASE WHEN RK =  3 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL3
+		     , MAX(CASE WHEN RK =  4 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL4
+		     , MAX(CASE WHEN RK =  5 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL5
+		     , MAX(CASE WHEN RK =  6 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL6
+		     , MAX(CASE WHEN RK =  7 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL7
+		     , MAX(CASE WHEN RK =  8 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL8
+		     , MAX(CASE WHEN RK =  9 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL9
+		     , MAX(CASE WHEN RK = 10 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL10
+		     , MAX(CASE WHEN RK = 11 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL11
+		     , MAX(CASE WHEN RK = 12 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL12
+		     , MAX(CASE WHEN RK = 13 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL13
+		     , MAX(CASE WHEN RK = 14 THEN FN_GET_CODE_NM('G005',NI_ITEM_CD) ELSE NULL END) AS COL14
+		     , COUNT(*)                                                                    AS COL_CNT
+		FROM   (
+		        SELECT NI_ITEM_CD
+		             , RANK() OVER(ORDER BY NI_ITEM_CD) AS RK /*정렬순서 중요함. 변경하지 마세요.*/
+		        FROM   TB_NOTI_INFO
+		        WHERE  NI_CLSF_CD = #{niClsfCd}
+		        GROUP  BY NI_ITEM_CD
+		       ) A
+	</select>
+	
 </mapper>

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

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.style24.admin.biz.dao.TsaMarketingDao">
-	<!-- xodud1202 진행 -->
-
-	<!-- 품목 목록 -->
-	<select id="getFreeGoodsPromotionList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
-		/* TsaMarketing.getFreeGoodsPromotionList */
-		SELECT FG.FREEGIFT_SQ
-		, FG.FREEGIFT_NM
-		, FG.FREEGIFT_STAT
-		, DATE_FORMAT(FG.FREEGIFT_STDT, '%Y.%m.%d') AS FREEGIFT_STDT
-		, DATE_FORMAT(FG.FREEGIFT_EDDT, '%Y.%m.%d') AS FREEGIFT_EDDT
-		, (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.REG_NO) AS REG_NM
-		, DATE_FORMAT(FG.REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
-		, (SELECT USER_NM FROM TB_USER WHERE USER_NO = FG.UPD_NO) AS UPD_NM
-		, DATE_FORMAT(FG.UPD_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
-		FROM TB_FREEGIFT FG
-		WHERE 1=1
-		<if test="searchTxt != null and searchTxt != ''">
-			<if test="promotionGubun != null and promotionGubun == 'freegiftSq'">
-				AND FG.FREEGIFT_SQ = #{searchTxt}
-			</if>
-			<if test="promotionGubun != null and promotionGubun == 'freegiftNm'">
-				AND FG.FREEGIFT_NM = #{searchTxt}
-			</if>
-		</if>
-		ORDER BY REG_DT DESC
-	</select>
-
-	<!-- // xodud1202 진행 -->
-
-</mapper>

+ 3 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaOcm.xml

@@ -17,6 +17,9 @@
 		     , USE_YN            /*사용여부*/
 		FROM   TB_EXTMALL A
 		WHERE  1 = 1
+		<if test="extmallId != null and extmallId != ''">
+		AND    EXTMALL_ID = #{extmallId}
+		</if>
 		<if test="vendorId != null and vendorId != ''">
 		AND    VENDOR_ID = #{vendorId}
 		</if>

+ 53 - 17
src/main/java/com/style24/persistence/mybatis/shop/TsaOrderChange.xml

@@ -51,6 +51,14 @@
 		     , DFP.RTN_DELV_FEE
 		     , DFP.DELV_FEE + DFP.RTN_DELV_FEE AS EXC_DELV_FEE
 		     , 0			AS ORD_CAN_CHG_QTY
+		     , VS.OPT_CD2S
+		     , VS.CURR_STOCK_QTYS
+		     , DL.RTN_LOC_NM
+		     , DL.RTN_LOC_ZIPCODE
+		     , DL.RTN_LOC_BASE_ADDR
+		     , DL.RTN_LOC_DTL_ADDR
+		     , DL.RTN_LOC_TELNO
+		     , DL.SELF_YN
 		FROM   TB_ORDER_DETAIL OD
 		INNER  JOIN TB_GOODS G1
 		ON     OD.GOODS_CD = G1.GOODS_CD
@@ -90,6 +98,34 @@
 		ON     DF.SUPPLY_COMP_CD  = DFP.SUPPLY_COMP_CD 
 		AND    DF.DELV_FEE_CD = DFP.DELV_FEE_CD 
 		AND    DFP.USE_YN = 'Y'
+		INNER  JOIN (
+			SELECT TDL.DELV_LOC_CD
+			     , TDL.RTN_LOC_NM
+			     , TDL.RTN_LOC_TELNO
+			     , TDL.RTN_LOC_ZIPCODE
+			     , TDL.RTN_LOC_BASE_ADDR
+			     , TDL.RTN_LOC_DTL_ADDR
+			     , CASE WHEN TSC.DISTRIBUTION_GB IN ('G065_10', 'G065_11', 'G065_12')
+						THEN 'Y'
+						ELSE 'N'
+				   END AS SELF_YN
+			  FROM TB_DELIVERY_LOC TDL
+			 INNER JOIN TB_SUPPLY_COMPANY TSC
+			    ON TDL.SUPPLY_COMP_CD = TSC.SUPPLY_COMP_CD
+		) DL
+		ON     OD.DELV_LOC_CD = DL.DELV_LOC_CD
+		INNER  JOIN (
+			SELECT GOODS_CD
+			     , OPT_CD1
+			     , GROUP_CONCAT(OPT_CD2 ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',')        AS OPT_CD2S
+			     , GROUP_CONCAT(CURR_STOCK_QTY ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',') AS CURR_STOCK_QTYS
+			  FROM VW_STOCK
+			 WHERE GOODS_CD IN (SELECT ITEM_CD FROM TB_ORDER_DETAIL_ITEM WHERE ORD_NO = #{ordNo})
+			   AND (CURR_STOCK_QTY - BASE_STOCK_QTY) > 0
+			 GROUP BY GOODS_CD, OPT_CD1
+		) VS
+		ON     ODI.ITEM_CD = VS.GOODS_CD
+		AND    ODI.OPT_CD1 = VS.OPT_CD1
 		WHERE  1=1
 		<if test="ordDtlStatArr != null and ordDtlStatArr != ''">
         AND    OD.ORD_DTL_STAT IN
@@ -100,6 +136,7 @@
 		AND    OD.ORD_NO = #{ordNo}
 		GROUP  BY OD.ORD_NO
 		     , OD.ORD_DTL_NO
+		     , ODI.ORD_DTL_ITEM_SQ
 	    ORDER  BY OD.ORD_NO
 	         , OD.ORD_DTL_NO
 	</select>
@@ -140,9 +177,9 @@
 			 , #{addPayCost}
 			 , #{addPayAmt}
 			 , #{regNo}
-			 , SYSDATE()
+			 , NOW()
 			 , #{updNo}
-			 , SYSDATE()
+			 , NOW()
 		)
 	</insert>
 
@@ -168,7 +205,7 @@
 		     , ODI.REAL_ORD_AMT 	= ODI.REAL_ORD_AMT 			- #{realOrdAmt}
 		     , ODI.GFCD_USE_AMT 	= ODI.GFCD_USE_AMT 			- #{gfcdUseAmt}
 		     , ODI.UPD_NO 			= #{updNo}
-		     , ODI.UPD_DT 			= SYSDATE()
+		     , ODI.UPD_DT 			= NOW()
 		WHERE  1=1
 		AND    ODI.ORD_NO 			= #{ordNo} 
 		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
@@ -259,7 +296,7 @@
 		AND    OP.OPT_CD2 = ODI.OPT_CD2
 		SET    OP.CURR_STOCK_QTY = OP.CURR_STOCK_QTY + (ODI.ITEM_QTY * #{ordCanChgQty})
 		     , OP.UPD_NO = #{updNo}
-		     , OP.UPD_DT = SYSDATE()
+		     , OP.UPD_DT = NOW()
 		WHERE  1=1
 		AND    ODI.ORD_NO 			= #{ordNo} 
 		AND    ODI.ORD_DTL_NO 		= #{ordDtlNo} 
@@ -502,11 +539,11 @@
 			, #{ordDtlNo}
 			, #{chgQty}
 			, #{chgStat}
-			, SYSDATE()
+			, NOW()
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 			, #{updNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 	
@@ -545,7 +582,7 @@
 			, UPD_DT
 		) 
 		SELECT ORD_NO
-		 	 , SYSDATE()
+		 	 , NOW()
 			 , PAY_MEANS
 			 , #{payAmt}
 			 , #{pgCpnAmt}
@@ -570,9 +607,9 @@
 			 , ESCROW_YN
 			 , #{ordChgSq}
 			 , #{regNo}
-			 , SYSDATE()
+			 , NOW()
 			 , #{updNo}
-			 , SYSDATE()
+			 , NOW()
 		FROM   TB_PAYMENT 
 		WHERE  1=1
 		AND    ORD_NO = #{ordNo}
@@ -618,7 +655,7 @@
 			, #{rfPrePntAmt}
 			, #{rfGfcdUseAmt}
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 
@@ -656,9 +693,9 @@
 			, 'N'
 			, null
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 			, #{updNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 	
@@ -668,7 +705,7 @@
 		UPDATE TB_ORD_FREEGIFT_VAL
 		SET    DEL_YN= 'N'
 		     , UPD_NO = #{updNo}
-		     , UPD_DT = SYSDATE()
+		     , UPD_DT = NOW()
 		WHERE  FREEGIFT_VAL_SQ IN (
 			SELECT OFRV.FREEGIFT_VAL_SQ 
 			FROM   TB_ORD_FREEGIFT OFR
@@ -750,14 +787,13 @@
 			, 'N'
 			, 'N'
 			, #{regNo}
-			, SYSDATE()
+			, NOW()
 			, #{updNo}
-			, SYSDATE()
+			, NOW()
 		)
 	</insert>
 	
 	
-	
 </mapper>
 
 

+ 24 - 23
src/main/webapp/WEB-INF/views/goods/GoodsNotiInfoForm.html

@@ -39,13 +39,12 @@
 						<th>고시분류<em class="required" title="필수"></em></th>
 						<td>
 							<select name="niClsfCd" required="required" data-valid-name="고시분류">
-								<option value="">[전체]</option>
 								<option th:if="${niClsfCdList}" th:each="oneData, status : ${niClsfCdList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}"></option>
 							</select>
 						</td>
 						<th>상품코드</th>
 						<td>
-							<textarea class="textareaR3 w70p" name="goodsCds" id="goodsCds"></textarea>
+							<textarea class="textareaR3 w200" name="goodsCd" id="goodsCd"></textarea>
 						</td>
 					</tr>
 				</table>
@@ -77,32 +76,33 @@
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var roleList = gagajf.convertToArray([[${roleList}]]);
-	
 	// specify the columns
-	var columnDefs = [
+	let columnDefs = [
 		{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
-		{headerName: "COL1", field: "col1", width: 100},
-		{headerName: "COL2", field: "col2", width: 100},
-		{headerName: "COL3", field: "col3", width: 100},
-		{headerName: "COL4", field: "col4", width: 100},
-		{headerName: "COL5", field: "col5", width: 100},
-		{headerName: "COL6", field: "col6", width: 100},
-		{headerName: "COL7", field: "col7", width: 100},
-		{headerName: "COL8", field: "col8", width: 100},
-		{headerName: "COL9", field: "col9", width: 100},
-		{headerName: "COL10", field: "col10", width: 100},
-		{headerName: "COL11", field: "col11", width: 100},
-		{headerName: "COL12", field: "col12", width: 100},
-		{headerName: "COL13", field: "col13", width: 100}
+		{headerName: "상품명", field: "goodsNm", width: 300},
+		{headerName: "COL1", field: "col1", width: 150},
+		{headerName: "COL2", field: "col2", width: 150},
+		{headerName: "COL3", field: "col3", width: 150},
+		{headerName: "COL4", field: "col4", width: 150},
+		{headerName: "COL5", field: "col5", width: 150},
+		{headerName: "COL6", field: "col6", width: 150},
+		{headerName: "COL7", field: "col7", width: 150},
+		{headerName: "COL8", field: "col8", width: 150},
+		{headerName: "COL9", field: "col9", width: 150},
+		{headerName: "COL10", field: "col10", width: 150},
+		{headerName: "COL11", field: "col11", width: 150},
+		{headerName: "COL12", field: "col12", width: 150},
+		{headerName: "COL13", field: "col13", width: 150},
+		{headerName: "COL14", field: "col14", width: 150}
 	];
 	
 	// Get GridOptions
-	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	let gridOptions = gagaAgGrid.getGridOptions(columnDefs);
 	
 	// Grid 속성 변경
-	var fnChangeGridProperty = function(colInfo) {
-		var colCnt = Number(colInfo.useColsCnt);
+	let fnChangeGridProperty = function(colInfo) {
+		console.log(colInfo);
+		let colCnt = Number(colInfo.colCnt);
 		
 		// 컬럼 이름 변경
 		if (colCnt >= 1) gagaAgGrid.setColumnHeaderName(gridOptions, 'col1', colInfo.col1);
@@ -118,10 +118,11 @@
 		if (colCnt >= 11) gagaAgGrid.setColumnHeaderName(gridOptions, 'col11', colInfo.col11);
 		if (colCnt >= 12) gagaAgGrid.setColumnHeaderName(gridOptions, 'col12', colInfo.col12);
 		if (colCnt >= 13) gagaAgGrid.setColumnHeaderName(gridOptions, 'col13', colInfo.col13);
+		if (colCnt >= 14) gagaAgGrid.setColumnHeaderName(gridOptions, 'col14', colInfo.col14);
 		gridOptions.columnApi.resetColumnState();
 
 		// 컬럼 숨김 처리
-		for (var k = 1; k <= 13; k++) {
+		for (var k = 1; k <= 14; k++) {
 			// 컬럼 숨긴걸 초기화 한다.
 			gagaAgGrid.showOrHideColumn(gridOptions, 'col' + k, true);
 		
@@ -141,7 +142,7 @@
 		// Fetch data
 		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm', function() {
 			// 업로드의 칼럼정보 가져오기
-			var actionUrl = '/goods/noti/info/column/' + $('#searchForm select[name=niClsfCd]').val();
+			let actionUrl = '/goods/noti/info/column/' + $('#searchForm select[name=niClsfCd]').val();
 			
 			$.getJSON(actionUrl
 					, function(result, status) {

+ 41 - 22
src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionForm.html

@@ -55,7 +55,7 @@
 							<td>
 								<label class="rdoBtn"><input type="radio" name="promotionGubun" id="promotionId" value="freegiftSq"  checked/>프로모션ID</label>
 								<label class="rdoBtn"><input type="radio" name="promotionGubun" id="promotionName" value="freegiftNm"/>프로모션명</label>
-								<input type="text" class="w900" name="searchTxt" id="searchTxt" />
+								<input type="text" class="w900" name="searchTxt" id="searchTxt" maxlength="30" />
 							</td>
 						</tr>
 					</table>
@@ -83,25 +83,26 @@
 							<option value="1000">1000개씩 보기</option>
 						</select>
 						<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+
+						<button type="button" class="btn btn-info btn-lg" id="btnFreeGoodsRegi" >프로모션등록</button>
 					</li>
 				</ul>
-				<div class="panelBar">
-					<div class="right">
-						<button type="button" class="btn btn-info btn-lg" id="btnFreeGoodsRegi" >프로모션등록</button>
-					</div>
-				</div>
 				<!-- 검색결과 영역 -->
-				<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham lh60"></div>
+				<div id="gridList" style="width: 100%; height: 700px;" class="ag-theme-balham"></div>
 			</div>
 		</form>
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
-	var columnDefs = [];
-	columnDefs = [
+	//let freegiftStatList = gagajf.convertToArray([[${freegiftStatList}]]);		// 프로모션 상태 리스트
+	let columnDefs = [
 		{headerName: "프로모션ID", field: "freegiftSq", width: 80, cellClass: 'text-center'},
-		{headerName: "프로모션명", field: "freegiftNm", width: 130, cellClass: 'text-center'},
-		{headerName: "상태", field: "freegiftStat", width: 140, cellClass: 'text-center'},
+		{headerName: "프로모션명", field: "freegiftNm", width: 350, cellClass: 'text-center'
+			,cellRenderer: function(params) {
+				return '<a href="javascript:void(0);">' + params.value + '</a>';
+			}
+		},
+		{headerName: "상태", field: "freegiftStatNm", width: 140, cellClass: 'text-center'},
 		{headerName: "시작일", field: "freegiftStdt", width: 140, cellClass: 'text-center'},
 		{headerName: "종료일", field: "freegiftEddt", width: 140, cellClass: 'text-center'},
 		{headerName: "등록자", field: "regNm", width: 200, cellClass: 'text-left'
@@ -121,10 +122,9 @@
 
 	// Row Click
 	gridOptions.onCellClicked = function(event) {
-		var goodsCd = event.data.goodsCd;
+		var freegiftSq = event.data.freegiftSq;
 		if (event.colDef.field == "freegiftNm"){
-			// 수정 필요
-			// cfnOpenGoodsDetailPopup('U',goodsCd);
+			cfnOpenFreeGoodsPromotionSetPopup('U', freegiftSq);
 		}
 	}
 
@@ -136,7 +136,7 @@
 	} */
 
 	// 초기화 클릭시
-	$('#btnInit').on('click', function() {
+	$('#searchForm #btnInit').on('click', function() {
 		$('#searchForm')[0].reset();
 		//$("#searchForm input[type=radio]").removeClass("checked");
 		$("#searchForm input[type=checkbox]").removeClass("checked");
@@ -146,7 +146,7 @@
 	});
 
 	// 조회클릭시
-	$('#btnSearch').on('click', function() {
+	$('#searchForm #btnSearch').on('click', function() {
 		$("#searchForm input[name=pageNo]").val('1');
 		fnFreeGoodsPromotionListSearch();
 	});
@@ -165,7 +165,6 @@
 		var toDate = $('#searchForm input[name=edDate]').val();
 
 		if (!gagajf.isNull(fromDate) || !gagajf.isNull(toDate)) {
-
 			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
 				mcxDialog.alertC("기간 조회시 시작일자와 종료일자를 입력하세요.", {
 					sureBtnText: "확인",
@@ -185,6 +184,22 @@
 				});
 				return false;
 			}
+
+			// 검색 기간 1년 이내로 지정
+			let stDateArray = fromDate.split("-");
+			let stDate = new Date(stDateArray[0], stDateArray[1] - 1, stDateArray[2]);
+			let edDateArray = toDate.split("-");
+			let edDate = new Date(edDateArray[0], edDateArray[1] - 1, edDateArray[2]);
+			let betweenDate = (edDate.getTime() - stDate.getTime()) / 1000 / 60 / 60 / 24;
+			if(betweenDate > 365) {
+				mcxDialog.alertC("최대 1년까지 선택하실 수 있습니다.", {
+					sureBtnText: "확인",
+					sureBtnClick: function() {
+						$('#searchForm input[name=stDate]').focus();
+					}
+				});
+				return false;
+			}
 		}
 
 		return true;
@@ -201,12 +216,11 @@
 		
 	}
 
-	// 조회클릭시
-	$('#btnFreeGoodsRegi').on('click', function() {
+	// 프로모션 등록 클릭시
+	$('#searchForm #btnFreeGoodsRegi').on('click', function() {
 		cfnOpenFreeGoodsPromotionSetPopup('C');
 	});
 
-
 	//페이징
 	$('#searchForm select[name=pageSize]').on('change', function() {
 		$("#searchForm input[name=pageNo]").val('1');
@@ -214,12 +228,17 @@
 	});
 
 	$(document).ready(function() {
-
+		// 기간 검색 조건
 		cfnCreateCalendar('#sellTerms', 'stDate', 'edDate', true, '기간', 'X');
 
+		// 기간 검색 default 조건 (최근1주일)
+		let date = new Date();
+		$("#searchForm #edDate").val(date.format("YYYY-MM-DD"));	// 오늘 날짜
+		date.setDate(date.getDate() - 6);							//월~일, 금~목으로 6을 뺌
+		$("#searchForm #stDate").val(date.format("YYYY-MM-DD"));	// 1주일 전 날짜
+
 		// Create a agGrid
 		gagaAgGrid.createGrid('gridList', gridOptions);
-
 	});
 
 /*]]>*/

File diff suppressed because it is too large
+ 557 - 312
src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html


+ 877 - 0
src/main/webapp/WEB-INF/views/order/ExchangeRequestForm.html

@@ -0,0 +1,877 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : ExchangeRequestForm.html
+ * @desc    : 교환요청 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.01.15   card007     최초 작성
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1400" data-height="600">
+	<div class="panelStyle">
+		<div class="panelTitle">
+			<h2>교환요청</h2>
+			<button type="button" class="close" onclick="uifnPopupClose('popupExchangeRequestForm');"><i class="fa fa-times"></i></button>
+		</div>
+			
+		<div class="panelContent" style="height:90%; overflow-y:auto; padding:0px 20px !important; ">
+			<form id="exchangeRequestFrm" name="exchangeRequestFrm" action="/orderChange/exchange" method="post" target="hdFrameForOrderExchange">
+				<input type="hidden" name="ordNo" th:value="${ordNo}"/>
+				<input type="hidden" name="chgReason" value=""/>
+				<input type="hidden" name="chgReasonDesc" value=""/>
+				
+				<h4>주문정보</h4>
+				<div id="gridOrderCancelRequestList" style="width:100%; height: 200px;" class="ag-theme-balham"></div>
+
+				<h4>배송비정보</h4>
+				<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>
+				</div>
+				
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>교환사유 <i class="star"></i></th>
+							<td>
+								<select name="selectChgReason" onchange="fnChangeChgReason($(this).val());">
+									<option value="">[선택하세요]</option>
+									<option th:if="${chgReasonList}" th:each="oneData, status : ${chgReasonList}" th:value="|${oneData.cd}:${oneData.cdNm}|" th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+								</select>
+							</td>
+							<th>귀책사유</th>
+							<td><span id="imputeReason"></span></td>
+						</tr>
+						<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>
+							</td>
+							<th>추가배송비</th>
+							<td id="addDelvFee"></td>
+						</tr>
+						<tr>
+							<th>요청메모</th>
+							<td colspan="3">
+								<textarea id="chgMemo" name="chgMemo" style="height:80px;" placeholder="교환사유를 300자내외로 작성해 주세요"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				
+				<h4>회수지 정보</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>보내는사람 <i class="star"></i></th>
+							<td colspan="3"><input type="text" name ="chgerNm" class=""/></td>
+						</tr>
+						<tr>
+							<th>회수지주소 <i class="star"></i></th>
+							<td colspan="3">
+								<input type="text" name ="chgerZipNo" class="w100" readonly="readonly"/>
+								<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+								<input type="text" name ="chgerBaseAddr" class="w300"/>
+								<input type="text" name ="chgerDtlAddr" class="w300"/>
+							</td>
+						</tr>
+						<tr>
+							<th>일반전화</th>
+							<td>
+								<select name="chgerTelno1" class="w100">
+									<option value="">[선택하세요]</option>
+									<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+								</select>
+								- <input type="text" name ="chgerTelno2" class="w60" value="0000" />
+								- <input type="text" name ="chgerTelno3" class="w60" value="0000" />
+							</td>
+							<th>휴대전화 <i class="star"></i></th>
+							<td>
+								<select name="chgerPhnno1" class="w100">
+									<option value="">[선택하세요]</option>
+									<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+								</select>
+								- <input type="text" name ="chgerPhnno2" class="w60" value="0000" />
+								- <input type="text" name ="chgerPhnno3" class="w60" value="0000" />
+							</td>
+						</tr>
+					</tbody>
+				</table>
+
+				<h4>교환지 정보</h4>
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width:160px;" />
+						<col style="width:320px;" />
+						<col style="width:160px;" />
+						<col />
+					</colgroup>
+					<tbody>
+					<tr>
+						<th>받는사람 <i class="star"></i></th>
+						<td colspan="3"><input type="text" name ="recipNm" class=""/></td>
+					</tr>
+					<tr>
+						<th>교환지주소 <i class="star"></i></th>
+						<td colspan="3">
+							<input type="text" name ="recipZipNo" class="w100" readonly="readonly"/>
+							<button type="button" class="btn btn-info" onclick="fnOpenDaumAddr('delvLoc');">우편번호찾기</button>
+							<input type="text" name ="recipBaseAddr" class="w300"/>
+							<input type="text" name ="recipDtlAddr" class="w300"/>
+						</td>
+					</tr>
+					<tr>
+						<th>일반전화</th>
+						<td>
+							<select name="recipTelno1" class="w100">
+								<option value="">[선택하세요]</option>
+								<option th:if="${TelExcNoList}" th:each="oneData, status : ${TelExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+							</select>
+							- <input type="text" name ="recipTelno2" class="w60" value="0000" />
+							- <input type="text" name ="recipTelno3" class="w60" value="0000" />
+						</td>
+						<th>휴대전화 <i class="star"></i></th>
+						<td>
+							<select name="recipPhnno1" class="w100">
+								<option value="">[선택하세요]</option>
+								<option th:if="${PhnExcNoList}" th:each="oneData, status : ${PhnExcNoList}" th:value="${oneData.cd}" th:text="${oneData.cd}"></option>
+							</select>
+							- <input type="text" name ="recipPhnno2" class="w60" value="0000" />
+							- <input type="text" name ="recipPhnno3" class="w60" value="0000" />
+						</td>
+					</tr>
+					</tbody>
+				</table>
+			</form>
+		</div>
+	</div>
+</div>
+
+<!-- data -->
+<script th:inline="javascript">
+/*<![CDATA[*/
+var cancelRequestTargetList = [[${cancelRequestTargetList}]];				// 교환대상목록
+var ordNo 					= [[${ordNo}]];									// 주문번호
+var orderInfoList 			= [[${orderInfoList}]];							// 주문기본정보
+var payMeans 				= orderInfoList[0].payMeans;					// 결제수단
+var orderDelvAddrInfo		= [[${orderDelvAddrInfo}]];						// 회수지정보
+var addDelvFee				= 0;											// 추가배송비
+var addDelvFeeList			= [];											// 추가배송비정보
+
+var temp1 = true;
+var temp2 = false;
+
+// 1. 주문정보(교환대상)
+var columnExchangeReqList = [
+	{
+		headerName	: "주문상세정보",
+		children	: [
+			{headerName: "주문번호"		, field: "ordNo"			, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세"		, field: "ordDtlNo"			, width: 80		, cellClass: 'text-center'},
+			{headerName: "주문상세"		, field: "ordDtlStat"		, width: 80		, cellClass: 'text-center', hide: temp1},
+			{headerName: "주문상세상태"		, field: "ordDtlStatNm"		, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품코드"		, field: "goodsCd"			, width: 100	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품명"			, field: "goodsNm"			, width: 200	, cellClass: 'text-center', hide: temp1},
+			{headerName: "상품타입"		, field: "goodsTypeNm"		, width: 100	, cellClass: 'text-center', hide: temp2}
+		]
+	},
+	{
+		headerName	: "주문상세단품정보",
+		children	: [
+			{headerName: "단품번호"		, field: "ordDtlItemSq"		, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품코드"		, field: "itemCd"			, width: 100	, cellClass: 'text-center', hide: temp2},
+			{headerName: "단품명"			, field: "itemNm"			, width: 200	, cellClass: 'text-center', hide: temp2},
+			{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		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품금액"		
+				, field			: "itemPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "단품옵션금액"		
+				, field			: "optAddPrice"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문상세수량",
+		children	: [
+			{
+				headerName		: "주문"		
+				, field			: "ordQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소/요청"		
+				, field			: "cnclRtnQty"			
+				, width			: 80		
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var cnclRtnReqQty = parseInt(params.data.cnclRtnQty) + parseInt(params.data.ordReqChgQty);
+					return cnclRtnReqQty;
+				}
+			},
+			{headerName: "교환가능옵션"	, field: "optCd2s"			, width: 200		, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "교환옵션"
+				, field			: "ordChgOpt"
+				, width			: 100
+				, cellClass		: "text-center"
+				, cellRenderer	: function (params) {
+					var optArr			= params.data.optCd2s.split(',');
+					var ordChgOpt = params.data.ordChgOpt;
+
+					var strVal			= '';
+					strVal += '<select class="ordChgOpt" name="ordChgOpt" ordDtlNo="' + params.data.ordDtlNo + '" ordDtlItemSq="' + params.data.ordDtlItemSq + '" onchange="fnChangeOption(this)">';
+					
+					if (gagajf.isNull(ordChgOpt)) {
+						strVal += '<option value="">선택</option>'
+					} else {
+						strVal += '<option value="" selected>선택</option>'
+					}
+
+					$.each(optArr, function(idx,item){
+						if (ordChgOpt == item) {
+							strVal += '<option value="' + item + '" selected>' + item + '</option>';
+						} else {
+							strVal += '<option value="' + item + '">' + item + '</option>';
+						}
+					});
+
+					return strVal;
+				}
+			},
+			{headerName: "재고수량"	, field: "currStockQty"			, width: 100			, cellClass: 'text-center', hide: temp2},
+			{
+				headerName		: "교환신청수량"
+				, field			: "ordCanChgQty"
+				, width			: 100
+				, cellClass		: 'text-center'
+				, cellRenderer	: function (params) {
+					var ordQty 			= parseInt(params.data.ordQty);
+					var cnclRtnQty 		= parseInt(params.data.cnclRtnQty);
+					var ordReqChgQty 	= parseInt(params.data.ordReqChgQty);
+					var ordCanChgQty 	= ordQty - (cnclRtnQty +  ordReqChgQty);
+					
+					var strVal 			= "";
+					strVal += '<select class="ordCanChgQty ' + params.data.ordDtlNo + '" name="ordCanChgQty" ordDtlNo="'+params.data.ordDtlNo+'" onchange="fnChangeQty(this)">';
+					
+					for (i=0 ; i<=ordCanChgQty ; i++) {
+						if (i == params.data.ordCanChgQty) {
+							strVal += "	<option value='"+i+"' selected>"+i+"</option>";
+						} else {
+							strVal += "	<option value='"+i+"'>"+i+"</option>";
+						}
+					}
+				
+					strVal += "</select>";
+					return strVal;
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문단품금액",
+		children	: [
+			{
+				headerName		: "주문"
+				, field			: "ordAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "취소"		
+				, field			: "cnclRtnAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "즉시할인"		
+				, field			: "cpn1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선1"		
+				, field			: "tmtb1DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "다다익선2"		
+				, field			: "tmtb2DcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품쿠폰"		
+				, field			: "goodsCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "장바구니쿠폰"		
+				, field			: "cartCpnDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "포인트"		
+				, field			: "pntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "선포인트"		
+				, field			: "prePntDcAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "상품권"		
+				, field			: "gfcdUseAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			},
+			{
+				headerName		: "실결제금액"		
+				, field			: "realOrdAmt"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+			}
+		]
+	},
+	{
+		headerName	: "주문배송비정보",
+		children	: [
+			{
+				headerName		: "배송비"		
+				, field			: "delvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{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		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "기본배송비"		
+				, field			: "orgDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "반품배송비"		
+				, field			: "rtnDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{
+				headerName		: "교환배송비"		
+				, field			: "excDelvFee"			
+				, width			: 80		
+				, cellClass		: 'text-right'
+				, cellRenderer	: function (params) {
+					return params.value.addComma();
+				}
+				, hide			: temp2
+			},
+			{headerName: "전체취소가능"		, field: "allCanYn"			, width: 100	, cellClass: 'text-center', hide: temp2},
+		]
+	}
+];
+var gridOptionsExchangeReqList = gagaAgGrid.getGridOptions(columnExchangeReqList);
+
+// Add on options
+gridOptionsExchangeReqList.suppressRowClickSelection = true;
+gridOptionsExchangeReqList.rowSelection = 'multiple';
+
+// 3. 배송비정보(환불정보)
+var columnDelvCdList = [
+	{headerName: "업체"			, field: "supplyCompNm"		, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "배송비코드"		, field: "delvFeeCd"		, width: 100	, cellClass: 'text-center', hide: temp2},
+	{
+		headerName		: "추가배송비"
+		, field			: "addDelvFee"
+		, width			: 100
+		, cellClass		: 'text-right'
+		, cellRenderer	: function (params) {
+			return params.value.addComma();
+		}
+		, hide			: temp2
+	},
+	{headerName: "반품지명"		, field: "rtnLocNm"			, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지전화번호"	, field: "rtnLocTelno"		, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지우편번호"	, field: "rtnLocZipcode"	, width: 100	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지기본주소"	, field: "rtnLocBaseAddr"	, width: 300	, cellClass: 'text-center', hide: temp2},
+	{headerName: "반품지상세주소"	, field: "rtnLocDtlAddr"	, width: 300	, cellClass: 'text-center', hide: temp2},
+];
+var gridOptionsDelvCdList = gagaAgGrid.getGridOptions(columnDelvCdList);
+</script>
+
+<script>
+//현재 사유는 고객 입니다.
+var isCustomer = false;
+
+//  사유
+var fnChangeChgReason = function(reasonCd){
+	var arrReasonCd = reasonCd.split(":");
+	var customerReasonArr = ['G689_10', 'G689_30'];
+	
+	isCustomer = false;
+
+	// 취소, 반품, 교환 사유 판단
+	for (i=0 ; i<customerReasonArr.length ; i++) {
+		if (customerReasonArr[i] == arrReasonCd[0]) {
+			isCustomer = true;
+		}
+	}
+	
+	// 귀책사유설정 회사, 고객
+	if (isCustomer) {
+		$("#imputeReason").text("고객");
+	} else {
+		$("#imputeReason").text("회사");
+	}
+
+	$('#cancelRequestFrm input[name=chgReason]').val(arrReasonCd[0]);
+	$('#cancelRequestFrm input[name=chgReasonDesc]').val(arrReasonCd[1]);
+	
+	// 추가배송비 설정
+	fnChangeQty();
+}
+
+// 교환요청
+var fnExchangeRequestSubmit = function () {
+	var temp 		= false;
+	var ordDtlStat	= cancelRequestTargetList[0].ordDtlStat; 
+	var allCanYn 	= "N";
+
+	// 1. 교환수량 체크
+	for (i=0 ; i<cancelRequestTargetList.length ; i++) {
+		if (cancelRequestTargetList[i].ordCanChgQty > 0) {
+			temp = true;
+		}
+	}
+
+	if (temp == false) {
+		mcxDialog.alert('취소 할 수량을 입력하세요.');
+		return;
+	}
+
+	// 3. 교환사유 체크
+	var chgReason = $("#exchangeRequestFrm select[name=selectChgReason]").val();
+
+	if (gagajf.isNull(chgReason)) {
+		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();
+	
+	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(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 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();
+	
+	if (gagajf.isNull(recipZipNo)) {
+		mcxDialog.alert("교환지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipBaseAddr)) {
+		mcxDialog.alert("교환지주소를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipDtlAddr)) {
+		mcxDialog.alert("교환지주소를 입력하세요."); return;
+	}
+	
+	if (gagajf.isNull(recipPhnno1)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipPhnno2)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	if (gagajf.isNull(recipPhnno3)) {
+		mcxDialog.alert("휴대전화를 입력하세요."); return;
+	}
+	
+	var recipPhnno 		= recipPhnno1 + recipPhnno2 + recipPhnno3;
+	var recipTelno 		= recipTelno1 + recipTelno2 + recipTelno3;
+	var recipEmail 		= orderInfoList[0].ordEmail;
+	
+	var jsonObj = {
+		"ordNo"				: $('#exchangeRequestFrm input[name=ordNo]').val()
+		,"chgReason" 		: $('#exchangeRequestFrm input[name=chgReason]').val()
+		,"chgMemo"			: $('#chgMemo').val()
+		,"exchangeReqList" 	: cancelRequestTargetList
+		,"isCustomer"		: isCustomer
+		,"chgerNm"			: chgerNm
+		,"chgerEmail"		: chgerEmail
+		,"chgerZipNo"		: chgerZipNo
+		,"chgerBaseAddr"	: chgerBaseAddr
+		,"chgerDtlAddr"		: chgerDtlAddr
+		,"chgerPhnno"		: chgerPhnno
+		,"chgerTelno"		: chgerTelno
+		,"recipNm"			: recipNm
+		,"recipEmail"		: recipEmail
+		,"recipZipNo"		: recipZipNo
+		,"recipBaseAddr"	: recipBaseAddr
+		,"recipDtlAddr"		: recipDtlAddr
+		,"recipPhnno"		: recipPhnno
+		,"recipTelno"		: recipTelno
+	}
+
+	// 주문번호, 교환사유, 교환메모, (취소, 반품, 교환 신청 정보 목록)
+	var jsonData = JSON.stringify(jsonObj);
+	
+	mcxDialog.confirm('교환요청하시겠습니까?', {
+		cancelBtnText		: "반품",
+		sureBtnClick		: function(){
+			// 교환 실행
+			gagajf.ajaxJsonSubmit(
+				'/orderChange/exchangeRequest/'
+				, jsonData
+				, function() {
+					uifnPopupClose('popupOrderDetail');
+					fnReOpenOrderDetailPopup();
+					uifnPopupClose('popupReturnRequestForm');
+				}
+			);
+		}
+	});
+}
+
+// 우편번호 DAUM을 이용한 우편번호 팝업 레이어
+var fnOpenDaumAddr = function(loc) {
+	let daumZip = new daum.Postcode({
+		oncomplete: function(data) {
+			// 우편번호와 주소 정보를 해당 필드에 넣는다.
+			if (loc == 'withdraw') {
+				$('#exchangeRequestFrm input[name=chgerZipNo]').val(data.zonecode);
+				$('#exchangeRequestFrm input[name=chgerBaseAddr]').val(cfnGetDaumRoadAddr(data));
+				$('#exchangeRequestFrm input[name=chgerDtlAddr]').focus();
+			} else if (loc == 'exchange') {
+				$('#exchangeRequestFrm input[name=recipZipNo]').val(data.zonecode);
+				$('#exchangeRequestFrm input[name=recipBaseAddr]').val(cfnGetDaumRoadAddr(data));
+				$('#exchangeRequestFrm input[name=recipDtlAddr]').focus();
+			}
+			
+			cfnCloseDaumAddr();
+		},
+		width: '100%'
+	});
+	
+	cfnOpenDaumAddr(daumZip);
+}
+
+// 회수지정보 설정
+var fnSetChger = function(){
+	var data = orderDelvAddrInfo[0];
+	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
+	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
+	
+	$("#exchangeRequestFrm input[name=chgerNm]").val(data.recipNm);
+	$("#exchangeRequestFrm input[name=chgerZipNo]").val(data.recipZipNo);
+	$("#exchangeRequestFrm input[name=chgerBaseAddr]").val(data.recipBaseAddr);
+	$("#exchangeRequestFrm input[name=chgerDtlAddr]").val(data.recipDtlAddr);
+	
+	if (spRecipPhnno) {
+		$("#exchangeRequestFrm select[name=chgerPhnno1]").val(spRecipPhnno[0]);
+		$("#exchangeRequestFrm input[name=chgerPhnno2]").val(spRecipPhnno[1]);
+		$("#exchangeRequestFrm input[name=chgerPhnno3]").val(spRecipPhnno[2]);
+	}
+	
+	if (spRecipTelno) {
+		$("#exchangeRequestFrm select[name=chgerTelno1]").val(spRecipTelno[0]);
+		$("#exchangeRequestFrm input[name=chgerTelno2]").val(spRecipTelno[1]);
+		$("#exchangeRequestFrm input[name=chgerTelno3]").val(spRecipTelno[2]);
+	}
+}
+
+// 교환지정보 설정
+var fnSetExchangeAddr = function(){
+	var data = orderDelvAddrInfo[0];
+	var spRecipPhnno = (data.recipPhnno != null) ? data.recipPhnno.split('-') : null;
+	var spRecipTelno = (data.recipTelno != null) ? data.recipTelno.split('-') : null;
+	
+	$("#exchangeRequestFrm input[name=recipNm]").val(data.recipNm);
+	$("#exchangeRequestFrm input[name=recipZipNo]").val(data.recipZipNo);
+	$("#exchangeRequestFrm input[name=recipBaseAddr]").val(data.recipBaseAddr);
+	$("#exchangeRequestFrm input[name=recipDtlAddr]").val(data.recipDtlAddr);
+	
+	if (spRecipPhnno) {
+		$("#exchangeRequestFrm select[name=recipPhnno1]").val(spRecipPhnno[0]);
+		$("#exchangeRequestFrm input[name=recipPhnno2]").val(spRecipPhnno[1]);
+		$("#exchangeRequestFrm input[name=recipPhnno3]").val(spRecipPhnno[2]);
+	}
+	
+	if (spRecipTelno) {
+		$("#exchangeRequestFrm select[name=recipTelno1]").val(spRecipTelno[0]);
+		$("#exchangeRequestFrm input[name=recipTelno2]").val(spRecipTelno[1]);
+		$("#exchangeRequestFrm input[name=recipTelno3]").val(spRecipTelno[2]);
+	}
+}
+
+// 교환옵션 변경 이벤트
+var fnChangeOption = function(param) {
+	var optCd2 = $(param).val();
+	var ordDtlNo = $(param).attr('ordDtlNo');
+	var ordDtlItemSq = $(param).attr('ordDtlItemSq');
+
+	$.each(cancelRequestTargetList, function(idx, item){
+		if (item.ordDtlNo == ordDtlNo && item.ordDtlItemSq == ordDtlItemSq) {
+			var stockQtyArr = item.currStockQtys.split(',');
+			var sizeCdArr = item.optCd2s.split(',');
+			var stockIdx = sizeCdArr.indexOf(optCd2);
+			var stockQty = stockQtyArr[stockIdx];
+			item.currStockQty = stockQty;
+			item.ordChgOpt = optCd2;
+		}
+	});
+	
+	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+}
+
+// 교환수량 변경 이벤트
+var fnChangeQty = function(param) {
+	var ordCanChgQty = $(param).val();
+	var ordDtlNo = $(param).attr('ordDtlNo');
+	var exchangeRequestTargetList = [];
+
+	$.each(cancelRequestTargetList, function(idx, item){
+		if (item.ordDtlNo == ordDtlNo) {
+			if (gagajf.isNull(item.ordChgOpt)) {
+				mcxDialog.alert('교환옵션을 선택해주세요.');
+				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) {
+				exchangeRequestTargetList.push(item);
+			}
+		} else if (item.ordCanChgQty > 0) {
+			exchangeRequestTargetList.push(item);
+		}
+	});
+
+	// 추가배송비 설정
+	fnAddDelvFee(exchangeRequestTargetList);
+
+	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+}
+
+// 추가배송비 설정
+var fnAddDelvFee = function (exchangeRequestTargetList) {
+	var delvCdList = [];
+	var delvFeeList = [];
+	var delvFee = 0;
+
+	// 고객 귀책사유에 한하여 추가배송비 설정
+	$.each(exchangeRequestTargetList, function (idx, item) {
+		if (!delvCdList.includes(item.delvFeeCd)) {
+			if (isCustomer) {
+				var delvFeeTmp = $('#wdGb:checked').val() == 'W' ? item.excDelvFee : item.rtnDelvFee;
+				delvFee += delvFeeTmp;
+				item.addDelvFeeYn = 'Y';
+				item.addDelvFee = delvFeeTmp;
+			} else {
+				item.addDelvFeeYn = 'N';
+				item.addDelvFee = 0;
+			}
+
+			delvCdList.push(item.delvFeeCd);
+			delvFeeList.push(item);
+		}
+	});
+
+	addDelvFee = delvFee;
+	addDelvFeeList = delvFeeList;
+
+	// 회수방법 > 직접발송일 경우 그리드 표시
+	if ($('#wdGb:checked').val() == 'D') {
+		gridOptionsDelvCdList.api.setRowData(addDelvFeeList);
+	} else {
+		gridOptionsDelvCdList.api.setRowData();
+	}
+	
+	$('#addDelvFee').text(addDelvFee + '원');
+}
+
+$(document).ready(function() {
+	// 1. 그리드생성
+	gagaAgGrid.createGrid('gridOrderCancelRequestList'		, gridOptionsExchangeReqList);			// 주문정보
+	//gagaAgGrid.createGrid('gridOrderCancelRequestToBeList'	, gridOptionsExchangeReqToBeList);		// 취소정보
+	gagaAgGrid.createGrid('gridDelvCdList'					, gridOptionsDelvCdList);				// 배송비정보
+	gridOptionsExchangeReqList.api.setRowData(cancelRequestTargetList);
+	
+	// 2.1 TOTAL ROWS 없애기
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestList');
+	gagaAgGrid.hideStatusBar('gridOrderCancelRequestToBeList');
+	gagaAgGrid.hideStatusBar('gridDelvCdList');
+	
+	// 3. 회수지정보설정
+	fnSetChger();
+	
+	// 4. 교환지정보설정
+	fnSetExchangeAddr();
+});
+</script>
+</html>
+
+
+
+
+

+ 1 - 1
src/main/webapp/ux/css/admin.ui.css

@@ -815,7 +815,7 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 
 /* 카테고리 Sort */
 .categoryOrder {margin-bottom:15px; background:#fcfcfc;}
-.categoryOrder li {clear:both; padding-left:15px; line-height:40px; cursor:move; border-top:1px dashed red; }
+.categoryOrder li {clear:both; padding-left:15px; line-height:40px; cursor:move; border-top:1px dashed #ff0000; }
 .categoryOrder li button.on {background-image:url(/image/icon_cate_minus.png);}
 /* .categoryOrder li:after {content:''; position:absolute; top:8px; left:-10px; width:21px; height:21px; background:url(/image/line_cate.png)} */
 .categoryOrder li:before{position:relative; content:''; width:1px; height:100%; background:#ddd;}

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

@@ -711,12 +711,15 @@ var cfnOpenBrandListPopup = function(callbackfn, multiGb, searchTxt) {
  * @desc   : 프로모션 등록 팝업
  * <pre>
  *     cfnOpenFreeGoodsPromotionSetPopup('C');
+ *     or
+ *     cfnOpenFreeGoodsPromotionSetPopup('U', 11);
  * </pre>
  * @since  : 2020/12/21
  * @author : xodud1202
  */
-var cfnOpenFreeGoodsPromotionSetPopup = function(gbn) {
+var cfnOpenFreeGoodsPromotionSetPopup = function(gbn, freegiftSq) {
 	var actionUrl = "/marketing/freeGoodsRegiPopup/form?gbn=" + gbn;
+	if (typeof(freegiftSq) != 'undefined') actionUrl += "&freegiftSq=" + freegiftSq;
 
 	uifnPopupClose('popupFreeGoodsPromotionRegi');
 	cfnOpenModalPopup(actionUrl, 'popupFreeGoodsPromotionRegi');

Some files were not shown because too many files changed in this diff