Bladeren bron

이태영 - 20210114 사은품 프로모션 등록 처리 완료

xodud1202 5 jaren geleden
bovenliggende
commit
7d20f0b3d0

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

@@ -27,6 +27,46 @@ public interface TsaMarketingDao {
 	 */
 	Collection<FreeGoodsPromotion> getFreeGoodsPromotionList(FreeGoodsPromotion marketing);
 
+	/**
+	 * 사은품 프로모션 마스터 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void saveFreegoodsPromotionInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 제휴몰 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void saveFreegiftExtmallInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 대상 정보 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void saveFreegiftGoodsInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 사은품 지급 조건 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void saveFreegiftSectionInfo(FreeGoodsPromotion param);
+
+	/**
+	 * 사은품 프로모션 사은품 저장
+	 * @param param
+	 * @author xodud1202
+	 * @since 2021. 01. 15
+	 */
+	void savePromotionFreeGoodsInfo(FreeGoodsPromotion param);
+
 	/* // xodud1202 진행 */
 
 }

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

@@ -1,7 +1,13 @@
 package com.style24.admin.biz.service;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
+import com.gagaframework.web.util.GagaStringUtil;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.persistence.domain.Extmall;
+import com.style24.persistence.domain.Itemkind;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -14,6 +20,7 @@ import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.domain.FreeGoodsPromotion;
 
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  *상품관리 Service
@@ -34,6 +41,9 @@ public class TsaMarketingService {
 	@Autowired
 	private TsaMarketingDao marketingDao;
 
+	@Autowired
+	private TsaOcmService ocmService;
+
 	@Autowired
 	private TsaBusinessService businessService;
 
@@ -72,6 +82,144 @@ public class TsaMarketingService {
 		return marketingDao.getFreeGoodsPromotionList(param);
 	}
 
+	@Transactional("shopTxnManager")
+	public void saveFreegoodsPromotionInfo(FreeGoodsPromotion param) {
+		param.setRegNo(TsaSession.getInfo().getUserNo());
+		param.setUpdNo(TsaSession.getInfo().getUserNo());
+
+		// 등록 화면이면
+		if("C".equals(param.getGbn())) {
+			param.setFreegiftStat("G232_10");		// 프로모션 등록이면 대기 상태로 저장
+
+			marketingDao.saveFreegoodsPromotionInfo(param);		// 사은품 프로모션 마스터 정보 저장
+
+			// 제휴몰 등록 체크 여부 확인
+			if(param.getExtmallYn() != null && "Y".equals(param.getExtmallYn()) ) {
+				if(param.getExtmallList() != null && param.getExtmallList().length > 0) {
+					FreeGoodsPromotion extmallInfo = new FreeGoodsPromotion();
+					extmallInfo.setFreegiftSq(param.getFreegiftSq());
+					extmallInfo.setRegNo(TsaSession.getInfo().getUserNo());
+					extmallInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+
+					// 제휴몰 리스트만큼 반복
+					for(int i = 0 ; i < param.getExtmallList().length ; i++) {
+						extmallInfo.setExtmallId(param.getExtmallList()[i].getExtmallId());
+						extmallInfo.setVendorId(param.getExtmallList()[i].getVendorId());
+						marketingDao.saveFreegiftExtmallInfo(extmallInfo);		// 제휴몰 리스트 정보 저장
+					}
+				}
+			}
+
+			// 공급업체 설정 데이터 저장
+			if(param.getSupplyCompCds() != null && param.getSupplyCompCds().length > 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(TsaSession.getInfo().getUserNo());
+				supplyComp.setUpdNo(TsaSession.getInfo().getUserNo());
+
+				// 공급업체 리스트만큼 반복
+				for(int i = 0 ; i < param.getSupplyCompCds().length ; i++) {
+					supplyComp.setTargetVal(param.getSupplyCompCds()[i]);
+					marketingDao.saveFreegiftGoodsInfo(supplyComp);				// 적용 공급업체 리스트 저장
+				}
+			}
+
+			// 브랜드 설정 데이터 저장
+			if(param.getBrandCds() != null && param.getBrandCds().length > 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(TsaSession.getInfo().getUserNo());
+				brand.setUpdNo(TsaSession.getInfo().getUserNo());
+
+				// 브랜드 리스트만큼 반복
+				for(int i = 0 ; i < param.getBrandCds().length ; i++) {
+					brand.setTargetVal(param.getBrandCds()[i]);
+					marketingDao.saveFreegiftGoodsInfo(brand);				// 적용 브랜드 리스트 저장
+				}
+			}
+
+			// 적용 상품 데이터 저장
+			if(param.getApplyGoodsList() != null && param.getApplyGoodsList().length > 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(TsaSession.getInfo().getUserNo());
+				applyGoods.setUpdNo(TsaSession.getInfo().getUserNo());
+
+				// 브랜드 리스트만큼 반복
+				for(int i = 0 ; i < param.getApplyGoodsList().length ; i++) {
+					applyGoods.setTargetVal(param.getApplyGoodsList()[i].getGoodsCd());
+					marketingDao.saveFreegiftGoodsInfo(applyGoods);			// 적용 상품 리스트 저장
+				}
+			}
+
+			// 제외 상품 데이터 저장
+			if(param.getExceptGoodsList() != null && param.getExceptGoodsList().length > 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(TsaSession.getInfo().getUserNo());
+				exceptGoods.setUpdNo(TsaSession.getInfo().getUserNo());
+
+				// 적용 상품 리스트만큼 반복
+				for(int i = 0 ; i < param.getExceptGoodsList().length ; i++) {
+					exceptGoods.setTargetVal(param.getExceptGoodsList()[i].getGoodsCd());
+					marketingDao.saveFreegiftGoodsInfo(exceptGoods);			// 적용 상품 리스트 저장
+				}
+			}
+
+			// 사은품 조건1 사은품 존재 여부 및 구매금액 제한 조건 체크
+			if(param.getFreeGoods1() != null && param.getFreeGoods1().length > 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(TsaSession.getInfo().getUserNo());
+				freegoodsGiveInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+				marketingDao.saveFreegiftSectionInfo(freegoodsGiveInfo);	// 사은품 지급 조건 영역 저장
+
+				// 지급 사은품 리스트1 반복
+				for (int i = 0 ; i < param.getFreeGoods1().length ; i++) {
+					freegoodsGiveInfo.setItemCd(param.getFreeGoods1()[i].getProductNo() + "");		// 사은품 번호
+					freegoodsGiveInfo.setUsePoint(param.getFreeGoods1()[i].getUsePoint());			// 사은품 포인트액
+					freegoodsGiveInfo.setItemQty(param.getFreeGoods1()[i].getItemQty());			// 주문시 지급 수량
+					freegoodsGiveInfo.setLimitQty(param.getFreeGoods1()[i].getLimitQty());			// 한정 수량
+
+					marketingDao.savePromotionFreeGoodsInfo(freegoodsGiveInfo);	// 사은품 지급 상품 영역 저장
+				}
+			}
+
+			// 사은품 조건2 사은품 존재 여부 및 구매금액 제한 조건 체크
+			if(param.getFreeGoods2() != null && param.getFreeGoods2().length > 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(TsaSession.getInfo().getUserNo());
+				freegoodsGiveInfo.setUpdNo(TsaSession.getInfo().getUserNo());
+				marketingDao.saveFreegiftSectionInfo(freegoodsGiveInfo);	// 사은품 지급 조건 영역 저장
+
+				// 지급 사은품 리스트2 반복
+				for (int i = 0 ; i < param.getFreeGoods2().length ; i++) {
+					freegoodsGiveInfo.setItemCd(param.getFreeGoods2()[i].getProductNo() + "");		// 사은품 번호
+					freegoodsGiveInfo.setUsePoint(param.getFreeGoods2()[i].getUsePoint());			// 사은품 포인트액
+					freegoodsGiveInfo.setItemQty(param.getFreeGoods2()[i].getItemQty());			// 주문시 지급 수량
+					freegoodsGiveInfo.setLimitQty(param.getFreeGoods2()[i].getLimitQty());			// 한정 수량
+
+					marketingDao.savePromotionFreeGoodsInfo(freegoodsGiveInfo);	// 사은품 지급 상품 영역 저장
+				}
+			}
+		}
+	}
+
 	/* // xodud1202 진행 */
 
 }

+ 0 - 5
src/main/java/com/style24/admin/biz/web/TsaBusinessController.java

@@ -79,11 +79,6 @@ public class TsaBusinessController extends TsaBaseController {
 	@ResponseBody
 	public List<SupplyCompany> getCompanyList(@RequestBody SupplyCompany supplyComp) {
 		List<SupplyCompany> result = (ArrayList<SupplyCompany>) businessService.getSupplyCompanyList(supplyComp);
-
-		for (SupplyCompany supplyCompany : result) {
-			log.info("CHECK supplyCompNm >> " + supplyCompany.getSupplyCompNm());
-		}
-
 		return result;
 	}
 

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

@@ -140,8 +140,28 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2021. 01. 14
 	 */
 	@ResponseBody
-	@GetMapping("/freeGoodsPromotion/save")
-	public GagaResponse freeGoodsPromotionSave(FreeGoodsPromotion param) {
+	@PostMapping("/freeGoodsPromotion/save")
+	public GagaResponse freeGoodsPromotionSave(@RequestBody FreeGoodsPromotion param) {
+		try {
+			log.info("DATA CHECK getSelfYn >>			" + param.getSelfYn());
+			log.info("DATA CHECK getExtmallYn >>		" + param.getExtmallYn());
+			log.info("DATA CHECK getAllYn >>			" + param.getAllYn());
+			log.info("DATA CHECK getSectionVal >>		" + param.getSectionVal());
+			log.info("DATA CHECK getSectionVal2 >>		" + param.getSectionVal2());
+			log.info("DATA CHECK getSupplyCompCds >>	" + param.getSupplyCompCds()[0] + " / " + param.getSupplyCompCds().length);
+			log.info("DATA CHECK getBrandCds >>			" + param.getBrandCds()[0] + " / " + param.getBrandCds().length);
+			log.info("DATA CHECK getExtmallList >>		" + param.getExtmallList().length);
+			log.info("DATA CHECK getExtmallList >>		" + param.getExtmallList()[0].toString());
+			log.info("DATA CHECK getApplyGoodsList >>	" + param.getApplyGoodsList().length);
+			log.info("DATA CHECK getExceptGoodsList >>	" + param.getExceptGoodsList().length);
+			log.info("DATA CHECK getFreeGoods1 >>		" + param.getFreeGoods1().length);
+			log.info("DATA CHECK getFreeGoods2 >>		" + param.getFreeGoods2().length);
+
+			marketingService.saveFreegoodsPromotionInfo(param);
+		} catch(Exception e) {
+			e.printStackTrace();
+			return super.error(message.getMessage("FAIL_0001"));
+		}
 
 		return super.ok(message.getMessage("SUCC_0001"));
 	}

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

@@ -5,6 +5,7 @@ import com.style24.persistence.TscBaseDomain;
 import com.style24.persistence.TscPageRequest;
 import lombok.Data;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -17,16 +18,23 @@ 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 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
 
@@ -34,11 +42,19 @@ public class FreeGoodsPromotion extends TscBaseDomain {
 	private String goodsGb;				// 상품 구분 (G800_10|기본상품, G800_20|적용상품, G800_30|제외상품, G800_40|ALL)
 	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 String itemCd;				// 사은품 번호
+	private int usePoint;				// 포인트액
+	private int limitQty;				// 한정수량
+	private int itemQty;				// 지급수량
+	private int leftQty;				// 남은 수량
 
-	// 사은품 조건
-	private List<FreeGoodsSectionVal> goodsListNew;		// 사은품 조건 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)	private String[] supplyCompCds;				// 제휴몰 번호 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)	private String[] brandCds;					// 제휴몰 번호 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) private Extmall[] extmallList;				// 제휴몰 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) private Goods[] applyGoodsList;				// 적용 상품 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) private Goods[] exceptGoodsList;			// 제외 상품 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) private FreeGoodsSectionVal[] freeGoods1;	// 사은품 조건1 리스트
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) private FreeGoodsSectionVal[] freeGoods2;	// 사은품 조건2 리스트
 
 	// 기타 조건
 	private String promotionGubun;		// 프로모션 조회 검색 구분

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

@@ -19,8 +19,9 @@ 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;			// ??

+ 131 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaMarketing.xml

@@ -5,7 +5,7 @@
 
 	<!-- 품목 목록 -->
 	<select id="getFreeGoodsPromotionList" parameterType="FreeGoodsPromotion" resultType="FreeGoodsPromotion">
-		/* TsaMarketing.getFreeGoodsPromotionList */
+		/* TsaMarketing.getFreeGoodsPromotionList : 사은품 프로모션 리스트 조회 */
 		SELECT FG.FREEGIFT_SQ
 		, FG.FREEGIFT_NM
 		, FG.FREEGIFT_STAT
@@ -28,6 +28,136 @@
 		ORDER BY REG_DT DESC
 	</select>
 
+	<!-- 사은품 프로모션 마스터 정보 저장 -->
+	<insert id="saveFreegoodsPromotionInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.saveFreegoodsPromotionInfo : 사은품 프로모션 마스터 정보 저장 */
+		<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="saveFreegiftExtmallInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.saveFreegiftExtmallInfo : 사은품 프로모션 마스터 정보 저장 */
+		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="saveFreegiftGoodsInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.saveFreegiftGoodsInfo : 사은품 프로모션 대상 정보 저장 */
+		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="saveFreegiftSectionInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.saveFreegiftSectionInfo : 사은품 지급 조건 저장 */
+		<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="savePromotionFreeGoodsInfo" parameterType="FreeGoodsPromotion">
+		/* TsaMarketing.savePromotionFreeGoodsInfo : 사은품 프로모션 지급 사은품 저장 */
+		INSERT INTO TB_FREEGIFT_VAL (
+			  FREEGIFT_SQ
+			, FREEGIFT_SECTION_SQ
+			, USE_POINT
+			, ITEM_QTY
+			, ITEM_CD
+			, LIMIT_QTY
+			, REG_NO
+			, REG_DT
+			, UPD_NO
+			, UPD_DT
+		) VALUES (
+			  #{freegiftSq}
+			, #{freegiftSectionSq}
+			, #{usePoint}
+			, #{itemQty}
+			, #{itemCd}
+			, #{limitQty}
+			, #{regNo}
+			, CURRENT_TIMESTAMP
+			, #{updNo}
+			, CURRENT_TIMESTAMP
+		)
+	</insert>
+
 	<!-- // 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>

+ 76 - 39
src/main/webapp/WEB-INF/views/marketing/FreeGoodsPromotionRegiForm.html

@@ -23,13 +23,9 @@
 
 		<form id="freeGoodsPromotionForm" name="freeGoodsPromotionForm" th:method="post" >
 			<input type="hidden" name="gbn" th:value="${param.gbn}" />				<!-- 신규/수정 구분 -->
+			<input type="hidden" id="freegiftSq" name="freegiftSq" th:value="${param.freegiftSq}"/>	<!-- 사은품 프로모션 번호 -->
 			<input type="hidden" id="supplyCompCds" name="supplyCompCds"/>			<!-- 공급업체 리스트 -->
 			<input type="hidden" id="brandCds" name="brandCds"/>					<!-- 브랜드 리스트 -->
-			<input type="hidden" id="applyGoodsCds" name="applyGoodsCds"/>			<!-- 적용상품 리스트 -->
-			<input type="hidden" id="exceptGoodsCds" name="exceptGoodsCds"/>		<!-- 제외상품 리스트 -->
-			<input type="hidden" id="freeGoods1Cds" name="freeGoods1Cds"/>			<!-- 적용 사은품1 리스트 -->
-			<input type="hidden" id="freeGoods2Cds" name="freeGoods2Cds"/>			<!-- 적용 사은품2 리스트 -->
-			<input type="hidden" id="extmallIds" name="extmallIds" value=""/>			<!-- 적용 사은품2 리스트 -->
 
 			<div class="panelContent">
 				<table class="frmStyle">
@@ -71,6 +67,7 @@
 							<label class="chkBox"><input type="checkbox" id="selfYn" name="selfYn" value="Y"/>자사몰</label>
 							<label class="chkBox" id="G011_20"><input type="checkbox" id="extmallYn" name="extmallYn" value="Y"/>제휴몰</label>
 							<button type="button" class="btn btnRight btn-success btn-lg" id="btnExtmallPopup">선택</button><span id="extmallCntArea"> 선택 : <span id="extmallCnt">00</span>개</span>
+							<div id="gridFGExtmallList" style="display:none;"></div>
 						</td>
 					</tr>
 				</table>
@@ -201,7 +198,7 @@
 										<div><i class="fa fa-info-circle"></i> 사은품은 최대 <font color="red">5</font>개까지 설정하실 수 있습니다.</div>
 										<div><i class="fa fa-info-circle"></i> 구매 금액 조건을 추가하시면 구매 금액 충족 조건에 맞는 것으로 지급됩니다. 구매금액 조건은 최대 2개까지만등록 하실 수 있습니다.</div>
 										<div><i class="fa fa-info-circle"></i> 장바구니에 담았을 때의 가격 기준으로 적용됩니다.(주문상품쿠폰(다운로드쿠폰)/장바구니 쿠폰 할인 적용 전 판매가)</div>
-										<label for="saleAmt">구매금액</label><input type="text" class="w300" id="saleAmt" name="sectionVal"/> <br/>
+										<label for="saleAmt">구매금액</label><input type="text" class="w300" id="saleAmt" name="sectionVal" data-valid-type="numeric"/> <br/>
 										<span>사은품 목록</span>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddFreeGoods1">+ 사은품 선택</button>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteFreeGoods1">선택삭제</button>
@@ -214,7 +211,7 @@
 								<th>사은품 조건2<br/>(최대 2개)</th>
 								<td>
 									<div>
-										<label for="saleAmt2">구매금액</label><input type="text" class="w300" id="saleAmt2"  name="sectionVal2"/> <br/>
+										<label for="saleAmt2">구매금액</label><input type="text" class="w300" id="saleAmt2"  name="sectionVal2" data-valid-type="numeric"/> <br/>
 										<span>사은품 목록</span>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddFreeGoods2">+ 사은품 선택</button>
 										<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteFreeGoods2">선택삭제</button>
@@ -271,6 +268,12 @@
 <script th:inline="javascript">
 	let formId = "freeGoodsPromotionForm";
 	let FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
+	// 제휴몰 리스트 설정 (데이터 송부용 리스트 > 리스트 노출X)
+	let columnFGExtmallList = [
+		{headerName: "벤더ID", field: "vendorId", width: 120, cellClass: 'text-center'},
+		{headerName: "브랜드ID", field: "extmallId", width: 150, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "extmallNm", width: 150, cellClass: 'text-center'}
+	];
 	// 공급업체 리스트 설정
 	let columnFGCompanyList = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
@@ -425,6 +428,8 @@
 			}
 		}
 	];
+	// 제휴몰 리스트 설정
+	let gridOptionsFGExtmallList = gagaAgGrid.getGridOptions(columnFGExtmallList);
 	// 공급업체 리스트 설정
 	let gridOptionsFGCompanyList = gagaAgGrid.getGridOptions(columnFGCompanyList);
 	gridOptionsFGCompanyList.rowSelection = "multiple";
@@ -445,6 +450,7 @@
 	gridOptionsFreeGoods2List.rowSelection = "multiple";
 
 	$(document).ready(function() {
+		gagaAgGrid.createGrid("gridFGExtmallList", gridOptionsFGExtmallList);
 		gagaAgGrid.createGrid("gridFGPromotionCompanyList", gridOptionsFGCompanyList);
 		gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
 		gagaAgGrid.createGrid("gridFGApplyGoodsList", gridOptionsFGApplyGoodsList);
@@ -530,9 +536,15 @@
 		}
 	}
 
+	// 저장 후 콜백 함수
+	var fnFreeGoodsPromotionSaveFin = function(result) {
+
+	}
+
 	// 저장 버튼 클릭시
 	$('#btnFreegoodsPromotionSave').on('click', function() {
 		// 각 ag-grid list 수량
+		let extmallCnt = gagaAgGrid.getAllRowData(gridOptionsFGExtmallList).length;
 		let supplyCompCnt = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList).length;
 		let brandCnt = gagaAgGrid.getAllRowData(gridOptionsFGBrandList).length;
 		let applyGoodsCnt = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList).length;
@@ -571,7 +583,7 @@
 			return false;
 		}
 
-		if($("#freeGoodsPromotionForm #saleAmt").val() != "" && $("#freeGoodsPromotionForm #saleAmt").val() < 1) {
+		if($("#freeGoodsPromotionForm #saleAmt").val() == "" || $("#freeGoodsPromotionForm #saleAmt").val() < 1) {
 			mcxDialog.alert("사은품 조건1의 구매금액 조건을 설정해주세요.");
 			return false;
 		}
@@ -586,46 +598,40 @@
 		if(freeGoods2Cnt > 5) {
 			mcxDialog.alert("사은품 조건2의 사은품은 최대 5개까지 등록가능합니다.");
 			return false;
-		}
+		} /*else if (freeGoods2Cnt > 0 && (!$("#freeGoodsPromotionForm #saleAmt2").val() || $("#freeGoodsPromotionForm #saleAmt2").val() != "") && $("#freeGoodsPromotionForm #saleAmt2").val() < 0) {
+			mcxDialog.alert("사은품 조건2의 사은품 조건을 입력해주세요.");
+			return false;
+		}*/
 
 		// 각 리스트 데이터 세팅
-		let freeGoods1Datas;
 		if(supplyCompCnt > 0) { fnSetSendGridListVal(gridOptionsFGCompanyList, "supplyCompCd", "supplyCompCds"); }		// 공급업체 설정 데이터
 		if(brandCnt > 0) { fnSetSendGridListVal(gridOptionsFGBrandList, "brandCd", "brandCds"); }						// 브랜드 설정 데이터
-		if(applyGoodsCnt > 0) { fnSetSendGridListVal(gridOptionsFGApplyGoodsList, "goodsCd", "applyGoodsCds"); }		// 적용 상품 설정 데이터
-		if(exceptGoodsCnt > 0) { fnSetSendGridListVal(gridOptionsFGExceptGoodsList, "goodsCd", "exceptGoodsCds"); }		// 제외 상품 설정 데이터
-		if(freeGoods1Cnt > 0) {
-			let gridListValue = gagaAgGrid.getAllRowData(gridOptionsFreeGoods1List);	// 기존 리스트
-			freeGoods1Datas = JSON.stringify(gridListValue);
-			//$("#freeGoodsPromotionForm #freeGoods1Cds").val(jsonData);
-		}
-		//if(freeGoods1Cnt > 0) { fnSetSendGridListVal(gridOptionsFreeGoods1List, "productNo", "freeGoods1Cds"); }			// 사은품 조건 1
-		if(freeGoods2Cnt > 0) { fnSetSendGridListVal(gridOptionsFreeGoods1List, "productNo", "freeGoods2Cds"); }			// 사은품 조건 2
-
 
 		// var params =  $(formId).serialize();
-		var data = {  freegiftNm : $("#freeGoodsPromotionForm input[name=freegiftNm]").val()
-					, freegiftStdt : $("#freeGoodsPromotionForm input[name=freegiftStdt]").val()
-					, freegiftEddt : $("#freeGoodsPromotionForm input[name=freegiftEddt]").val()
-					, selfYn : $("#freeGoodsPromotionForm input[name=selfYn]").val()
-					, extmallYn : $("#freeGoodsPromotionForm input[name=extmallYn]").val()
-					, extmallIds : $("#freeGoodsPromotionForm input[name=extmallIds]").val()
-					, supplyCompCds : $("#freeGoodsPromotionForm input[name=supplyCompCds]").val()
-					, brandCds : $("#freeGoodsPromotionForm input[name=brandCds]").val()
-					, applyGoodsCds : $("#freeGoodsPromotionForm input[name=applyGoodsCds]").val()
-					, exceptGoodsCds : $("#freeGoodsPromotionForm input[name=exceptGoodsCds]").val()
-					, freeGoods1 : freeGoods1Datas
-					, freeGoods2 : $("#freeGoodsPromotionForm input[name=freeGoods2Cds]").val()
+		var data = {  gbn : [[${#strings.toString(param.gbn)}]]
+			        , freegiftNm : $("#freeGoodsPromotionForm input[name=freegiftNm]").val()
+					, freegiftStdt : $("#freeGoodsPromotionForm input[name=freegiftStdt]").val().replace(/-/gi, "")
+					, freegiftEddt : $("#freeGoodsPromotionForm input[name=freegiftEddt]").val().replace(/-/gi, "")
+					, selfYn : $("#freeGoodsPromotionForm input[name=selfYn]:checked").val()
+					, extmallYn : $("#freeGoodsPromotionForm input[name=extmallYn]:checked").val()
+					, allYn : $("#freeGoodsPromotionForm input[name=allYn]:checked").val()
+					, sectionVal : $("#freeGoodsPromotionForm input[name=sectionVal]").val()
+					, sectionVal2 : $("#freeGoodsPromotionForm input[name=sectionVal2]").val()
+					, supplyCompCds : JSON.parse($("#freeGoodsPromotionForm input[name=supplyCompCds]").val())
+					, brandCds : JSON.parse($("#freeGoodsPromotionForm input[name=brandCds]").val())
+					, extmallList : gagaAgGrid.getAllRowData(gridOptionsFGExtmallList)
+					, applyGoodsList : gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList)
+					, exceptGoodsList : gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList)
+					, freeGoods1 : gagaAgGrid.getAllRowData(gridOptionsFreeGoods1List)
+					, freeGoods2 : gagaAgGrid.getAllRowData(gridOptionsFreeGoods2List)
 		};
 
 		var jsonData = JSON.stringify(data);
-		gagajf.ajaxJsonSubmit('/goods/search/excelupload/save', jsonData, fnGoodsExcelUploadCallBack);
+		//gagajf.ajaxJsonSubmit('/display/category/refresh', null);
+		//gagajf.ajaxJsonSubmit('/marketing/freeGoodsPromotion/save', null);
+		gagajf.ajaxJsonSubmit('/marketing/freeGoodsPromotion/save', jsonData, fnFreeGoodsPromotionSaveFin);
 	});
 
-	var fnFreeGoodsPromotionSaveFin = function(result) {
-
-	}
-
 	// 공급업체 설정 / 업체 추가 콜백함수
 	var fnSetPopupComapnyInfo = function(result) {
 		fnSetListInfo(result, gridOptionsFGCompanyList, "supplyCompCd");
@@ -651,8 +657,39 @@
 		fnSetListInfo(result, gridOptionsFreeGoods2List, "productNo");
 	};
 
-	// 제휴몰 list 콜백함수
+
+	// 제휴몰 리스트 세팅
 	function fnSetPopupExtmallInfo(result) {
+		let resultList = [];											// 최종 상품 리스트
+		let gridListValue = gagaAgGrid.getAllRowData(gridOptionsFGExtmallList);	// 기존 리스트
+
+		// 콜백 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true;					// 받아온 모든 데이터
+
+			// 기존 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 조회한 상품 중 동일하지 않은 데이터만 추가
+				if((gridListValue[j].vendorId + "" + gridListValue[j].extmallId) == (result[i].vendorId + "" + result[i].extmallId)) {
+					addChk = false;			// 중복체크
+				}
+			}
+
+			// 추가된 데이터 중 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {	resultList.push(result[i]);	}
+		}
+
+		// 추가된 정보 그리드에 추가
+		for(let i = 0 ; i < resultList.length ; i++) {
+			gagaAgGrid.addRowData(gridOptionsFGExtmallList, resultList[i], "extmallId");
+		}
+
+		// 수정된 수량 갯수 수정
+		$("#freeGoodsPromotionForm #extmallCnt").text(gagaAgGrid.getAllRowData(gridOptionsFGExtmallList).length);
+	}
+
+	// 제휴몰 list 콜백함수
+	/* function fnSetPopupExtmallInfo(result) {
 		let extmallIds = [];
 		if($("#freeGoodsPromotionForm #extmallIds").val() != null && $("#freeGoodsPromotionForm #extmallIds").val() != "") {
 			extmallIds = JSON.parse($("#freeGoodsPromotionForm #extmallIds").val());
@@ -670,7 +707,7 @@
 		var jsonData = JSON.stringify(extmallIds);
 		$("#freeGoodsPromotionForm #extmallIds").val(jsonData);
 		$("#freeGoodsPromotionForm #extmallCnt").text(extmallIds.length);
-	}
+	} */
 
 	// 제휴몰 선택 버튼 클릭시
 	$('#freeGoodsPromotionForm #btnExtmallPopup').on('click', function() {

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

@@ -788,7 +788,7 @@ var cfnOpenMorebetterSetPopup = function(mode ,tmtbSeq) {
 /**
  * @type   : function
  * @access : public
- * @desc   : 공급업체 조회 팝업
+ * @desc   : 제휴몰 조회 팝업
  * <pre>
  *     cfnOpenCompanyListPopup();
  * </pre>