Explorar o código

Merge remote-tracking branch 'origin/xodud1202' into develop

xodud1202 %!s(int64=5) %!d(string=hai) anos
pai
achega
aa9a99e0f3

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

+ 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 진행 */
-
-}

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

+ 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 진행 */
-
-}

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

+ 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;				// 사은품명
 }

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

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

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

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 557 - 312
src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.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');

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio