Ver código fonte

최수빈-0112 다다익선 화면 커밋

bin2107 5 anos atrás
pai
commit
fd63eed41e

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

@@ -55,80 +55,6 @@ public interface TsaMarketingDao {
 	int getCouponListCnt(Coupon param);
 	/* // JSM 진행 */
 
-	/* CSB 진행 */
-	/**
-	 * 다다익선 프로모션 리스트
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	Collection<MoreBetter> getMorebetterList(MoreBetter param);
-
-	/**
-	 * 다다익선 마스터(TB_TMTB) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	void saveMorebetterMst(MoreBetter tmtb);
-
-	/**
-	 * 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 7
-	 */
-	void saveMorebetterGoods(MoreBetterGoods regSupplyComp);
-
-	/**
-	 * 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void saveMorebetterSection(MoreBetterSection regSection);
-
-	/**
-	 * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void saveMorebetterVal(MoreBetterSection regSection);
-
-	/**
-	 * 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	void saveMorebetterBurden(MoreBetterBurden regBurden);
-
-	/**
-	 * 다다익선 할인구간설정(TB_TMTB_SECTION) 삭제
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void deleteTmtbSectionList(MoreBetterSection sectionVal);
-
-	/**
-	 * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 삭제
-	 * @param MoreBetter
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 6
-	 */
-	void deleteTmtbValList(MoreBetterSection sectionVal);
-	/* // CSB 진행 */
-
 	/**
 	 * 쿠폰조회 목록
 	 * @param coupon - 쿠폰 정보

+ 181 - 0
style24.admin/src/main/java/com/style24/admin/biz/dao/TsaMorebetterDao.java

@@ -0,0 +1,181 @@
+package com.style24.admin.biz.dao;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.MoreBetter;
+import com.style24.persistence.domain.MoreBetterBurden;
+import com.style24.persistence.domain.MoreBetterGoods;
+import com.style24.persistence.domain.MoreBetterSection;
+import org.springframework.stereotype.Component;
+
+import java.util.Collection;
+
+/**
+ * 마케팅 다다익선 Dao
+ *
+ * @author bin2107
+ * @since 2021. 1. 12
+ */
+@ShopDs
+@Component
+public interface TsaMorebetterDao {
+    /* CSB 진행 */
+    /**
+     * 다다익선 프로모션 리스트
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    Collection<MoreBetter> getMorebetterList(MoreBetter param);
+
+    /**
+     * 다다익선 상세조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    MoreBetter getMorebetterMstInfo(Integer tmtbSq);
+
+    /**
+     * 다다익선 구간 조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    Collection<MoreBetterSection> getMorebetterSectionValList(Integer tmtbSq);
+
+    /**
+     * 다다익선 구간 조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    Collection<MoreBetterGoods> getMorebetterSupplyCompList(MoreBetterGoods merebetterGoods);
+
+    Collection<MoreBetterGoods> getMorebetterBrandList(MoreBetterGoods merebetterGoods);
+
+    Collection<MoreBetterGoods> getMorebetterApplyGoodsList(MoreBetterGoods merebetterGoods);
+
+    Collection<MoreBetterGoods> getMorebetterExceptGoodsList(MoreBetterGoods merebetterGoods);
+
+    /**
+     * 다다익선 구간 조회
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    Collection<MoreBetterBurden> getMorebetterBurdenList(Integer tmtbSq);
+
+    /**
+     * 다다익선 마스터(TB_TMTB) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    void saveMorebetterMst(MoreBetter tmtb);
+
+    /**
+     * 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 7
+     */
+    void saveMorebetterGoods(MoreBetterGoods regSupplyComp);
+
+    /**
+     * 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void saveMorebetterSection(MoreBetterSection regSection);
+
+    /**
+     * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void saveMorebetterVal(MoreBetterSection regSection);
+
+    /**
+     * 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    void saveMorebetterBurden(MoreBetterBurden regBurden);
+
+    /**
+     * 다다익선 공급업체(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbSupplyCompanyList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 브랜드(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbBrandList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 적용상품(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbApplyGoodsList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 제외상품(TB_TMTB_GOODS) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbExceptGoodsList(MoreBetterGoods moreBetterGoods);
+
+    /**
+     * 다다익선 할인구간설정(TB_TMTB_SECTION) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void deleteTmtbSectionList(MoreBetterSection moreBetterSection);
+
+    /**
+     * 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 6
+     */
+    void deleteTmtbValList(MoreBetterSection moreBetterSection);
+
+    /**
+     * 다다익선 업체분담율(TB_TMTB_BURDEN) 삭제
+     * @param MoreBetter
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 12
+     */
+    void deleteTmtbBurdenList(MoreBetterBurden moreBetterBurden);
+    /* // CSB 진행 */
+}

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

@@ -106,150 +106,6 @@ public class TsaMarketingService {
 	}
 	/* // JSM 진행 */
 
-	/* CSB 진행 */
-	/**
-	 * 다다익선 리스트
-	 * @param param
-	 * @return
-	 * @author bin2107
-	 * @since 2020. 12. 28
-	 */
-	public Collection<MoreBetter> getMorebetterList(MoreBetter param) {
-		return marketingDao.getMorebetterList(param);
-	}
-
-	/**
-	 * 다다익선 저장
-	 * @param tmtb
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 5
-	 */
-	@Transactional("shopTxnManager")
-	public void saveMoreBetterDetail(MoreBetter tmtb) {
-		// <,> replace 처리
-		tmtb.setRegNo(TsaSession.getInfo().getUserNo());
-		tmtb.setUdpNo(TsaSession.getInfo().getUserNo());
-
-		// TMTB 마스터(TB_TMTB) 저장
-		marketingDao.saveMorebetterMst(tmtb);
-
-		// 다다익선 적용대상 설정
-		// 공급업체
-		Collection<MoreBetterGoods> supplyCompList = tmtb.getSupplyCompListNew();
-		for (MoreBetterGoods regSupplyComp : supplyCompList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regSupplyComp.setTmtbGoodsSq(tmtbGoodsSq);
-			regSupplyComp.setTmtbSq(tmtb.getTmtbSq());
-			regSupplyComp.setGoodsGb("G800_20");
-			regSupplyComp.setTargetVal(regSupplyComp.getSupplyCompCd());
-			regSupplyComp.setRegNo(tmtb.getRegNo());
-			regSupplyComp.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regSupplyComp);
-		}
-
-		// 브랜드
-		Collection<MoreBetterGoods> brandList = tmtb.getBrandListNew();
-		for (MoreBetterGoods regBrand : brandList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regBrand.setTmtbGoodsSq(tmtbGoodsSq);
-			regBrand.setTmtbSq(tmtb.getTmtbSq());
-			regBrand.setGoodsGb("G800_20");
-			regBrand.setTargetVal(regBrand.getBrandCd());
-			regBrand.setRegNo(tmtb.getRegNo());
-			regBrand.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regBrand);
-		}
-
-		// 적용상품
-		Collection<MoreBetterGoods> applyGoodsList = tmtb.getApplyGoodsListNew();
-		for (MoreBetterGoods regApplyGoods : applyGoodsList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regApplyGoods.setTmtbGoodsSq(tmtbGoodsSq);
-			regApplyGoods.setTmtbSq(tmtb.getTmtbSq());
-			regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
-			regApplyGoods.setRegNo(tmtb.getRegNo());
-			regApplyGoods.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regApplyGoods);
-		}
-
-		// 제외상품
-		Collection<MoreBetterGoods> exceptGoodsList = tmtb.getExceptGoodsListNew();
-		for (MoreBetterGoods regExceptGoods : exceptGoodsList) {
-			// 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
-			// tmtbGoodsSq 생성
-			Integer tmtbGoodsSq = commonService.getNextSequence("SEQ_TMTB_GOODS");
-			regExceptGoods.setTmtbGoodsSq(tmtbGoodsSq);
-			regExceptGoods.setTmtbSq(tmtb.getTmtbSq());
-			regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
-			regExceptGoods.setRegNo(tmtb.getRegNo());
-			regExceptGoods.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterGoods(regExceptGoods);
-		}
-
-		// 다다익선 할인구간 저장
-		Collection<MoreBetterSection> sectionGbList = tmtb.getSectionGbListNew();
-		for (MoreBetterSection regSection : sectionGbList) {
-			// 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
-			// tmtbSectionSq 생성
-			Integer tmtbSectionSq = commonService.getNextSequence("SEQ_TMTB_SECTION");
-			regSection.setTmtbSectionSq(tmtbSectionSq);
-
-			// 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
-			// tmtbValSq 생성
-			Integer tmtbValSq = commonService.getNextSequence("SEQ_TMTB_VAL");
-			regSection.setTmtbValSq(tmtbValSq);
-			regSection.setTmtbSq(tmtb.getTmtbSq());
-			regSection.setRegNo(tmtb.getRegNo());
-			regSection.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterSection(regSection);
-			marketingDao.saveMorebetterVal(regSection);
-		}
-
-		// 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
-		Collection<MoreBetterBurden> burdenList = tmtb.getBurdenListNew();
-		for (MoreBetterBurden regBurden : burdenList) {
-			// tmtbBurdenSq 생성
-			Integer tmtbBurdenSq = commonService.getNextSequence("SEQ_TMTB_BURDEN");
-			regBurden.setTmtbBurdenSq(tmtbBurdenSq);
-			regBurden.setTmtbSq(tmtb.getTmtbSq());
-			regBurden.setRegNo(tmtb.getRegNo());
-			regBurden.setUdpNo(tmtb.getUdpNo());
-
-			marketingDao.saveMorebetterBurden(regBurden);
-		}
-
-		log.info("newBurdenSq = {}, newTmtbSq = {}, newSupplyCd = {}, newBurdenRate = {} , newUseYn = {}");
-
-	}
-
-	/**
-	 * 다다익선 다다익선 할인구간 삭제
-	 * @param tmtb
-	 * @return
-	 * @author bin2107
-	 * @since 2021. 1. 5
-	 */
-	@Transactional("shopTxnManager")
-	public void deleteSectionValList(Collection<MoreBetterSection> sectionValList) {
-		for (MoreBetterSection sectionVal : sectionValList) {
-			marketingDao.deleteTmtbSectionList(sectionVal);
-			marketingDao.deleteTmtbValList(sectionVal);
-		}
-	}
-	/* // CSB 진행 */
-
 	/**
 	 * 쿠폰조회 목록
 	 * @param coupon - 쿠폰 정보

+ 363 - 0
style24.admin/src/main/java/com/style24/admin/biz/service/TsaMorebetterService.java

@@ -0,0 +1,363 @@
+package com.style24.admin.biz.service;
+
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.persistence.domain.MoreBetter;
+import com.style24.persistence.domain.MoreBetterBurden;
+import com.style24.persistence.domain.MoreBetterGoods;
+import com.style24.persistence.domain.MoreBetterSection;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.style24.admin.biz.dao.TsaMorebetterDao;
+
+import java.util.Collection;
+
+/**
+ *마케팅>다다익선 Service
+ *
+ * @author bin2107
+ * @since 2021. 1. 12
+ */
+@Service
+@Slf4j
+public class TsaMorebetterService {
+    @Autowired
+    private TscMessageByLocale message;
+
+    @Autowired
+    private Environment env;
+
+    @Autowired
+    private TsaMorebetterDao morebetterDao;
+
+    @Autowired
+    private TsaCommonService commonService;
+
+    /* CSB 진행 */
+    /**
+     * 다다익선 리스트
+     * @param param
+     * @return
+     * @author bin2107
+     * @since 2020. 12. 28
+     */
+    public Collection<MoreBetter> getMorebetterList(MoreBetter param) {
+        return morebetterDao.getMorebetterList(param);
+    }
+
+    /**
+     * 다다익선 마스터 조회
+     * @param param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public MoreBetter getMorebetterMstInfo(Integer tmtbSq){
+        return morebetterDao.getMorebetterMstInfo(tmtbSq);
+    }
+
+    /**
+     * 다다익선 구간 조회
+     * @param param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public Collection<MoreBetterSection> getMorebetterSectionValList(Integer tmtbSq) {
+        return morebetterDao.getMorebetterSectionValList(tmtbSq);
+    }
+
+    /**
+     * 다다익선 구간 조회
+     * @param param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public Collection<MoreBetterGoods> getMorebetterSupplyCompList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterSupplyCompList(merebetterGoods);
+    }
+
+    public Collection<MoreBetterGoods> getMorebetterBrandList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterBrandList(merebetterGoods);
+    }
+
+    public Collection<MoreBetterGoods> getMorebetterApplyGoodsList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterApplyGoodsList(merebetterGoods);
+    }
+
+    public Collection<MoreBetterGoods> getMorebetterExceptGoodsList(Integer tmtbSq, String targetGb) {
+        MoreBetterGoods merebetterGoods = new MoreBetterGoods();
+        merebetterGoods.setTmtbSq(tmtbSq);
+        merebetterGoods.setTargetGb(targetGb);
+        return morebetterDao.getMorebetterExceptGoodsList(merebetterGoods);
+    }
+
+    /**
+     * 다다익선 구간 조회
+     * @param param
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 8
+     */
+    public Collection<MoreBetterBurden> getMorebetterBurdenList(Integer tmtbSq) {
+        return morebetterDao.getMorebetterBurdenList(tmtbSq);
+    }
+
+    /**
+     * 다다익선 저장
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 5
+     */
+    @Transactional("shopTxnManager")
+    public void saveMoreBetterDetail(MoreBetter tmtb) {
+        // <,> replace 처리
+        tmtb.setRegNo(TsaSession.getInfo().getUserNo());
+        tmtb.setUdpNo(TsaSession.getInfo().getUserNo());
+
+        // TMTB 마스터(TB_TMTB) 저장
+        morebetterDao.saveMorebetterMst(tmtb);
+
+        // 다다익선 적용대상 설정
+        // 공급업체
+        Collection<MoreBetterGoods> supplyCompList = tmtb.getSupplyCompListNew();
+        for(MoreBetterGoods regSupplyComp : supplyCompList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regSupplyComp.getTmtbGoodsSq = {}",regSupplyComp.getTmtbGoodsSq());
+            if("".equals(regSupplyComp.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regSupplyComp.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regSupplyComp.setTmtbSq(tmtb.getTmtbSq());
+            regSupplyComp.setGoodsGb("G800_20");
+            regSupplyComp.setTargetVal(regSupplyComp.getSupplyCompCd());
+            regSupplyComp.setRegNo(tmtb.getRegNo());
+            regSupplyComp.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regSupplyComp);
+        }
+
+        // 브랜드
+        Collection<MoreBetterGoods> brandList = tmtb.getBrandListNew();
+        for(MoreBetterGoods regBrand : brandList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regBrand.getTmtbGoodsSq = {}",regBrand.getTmtbGoodsSq());
+            if("".equals(regBrand.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regBrand.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regBrand.setTmtbSq(tmtb.getTmtbSq());
+            regBrand.setGoodsGb("G800_20");
+            regBrand.setTargetVal(regBrand.getBrandCd());
+            regBrand.setRegNo(tmtb.getRegNo());
+            regBrand.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regBrand);
+        }
+
+        // 적용상품
+        Collection<MoreBetterGoods> applyGoodsList = tmtb.getApplyGoodsListNew();
+        for(MoreBetterGoods regApplyGoods : applyGoodsList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regApplyGoods.getTmtbGoodsSq = {}",regApplyGoods.getTmtbGoodsSq());
+            if("".equals(regApplyGoods.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regApplyGoods.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regApplyGoods.setTmtbSq(tmtb.getTmtbSq());
+            regApplyGoods.setTargetVal(regApplyGoods.getGoodsCd());
+            regApplyGoods.setRegNo(tmtb.getRegNo());
+            regApplyGoods.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regApplyGoods);
+        }
+
+        // 제외상품
+        Collection<MoreBetterGoods> exceptGoodsList = tmtb.getExceptGoodsListNew();
+        for(MoreBetterGoods regExceptGoods : exceptGoodsList){
+            // 다다익선 적용대상 설정(TB_TMTB_GOODS) 저장
+            // tmtbGoodsSq 생성
+            log.info("regExceptGoods.getTmtbGoodsSq = {}",regExceptGoods.getTmtbGoodsSq());
+            if("".equals(regExceptGoods.getTmtbGoodsSq())){
+                Integer tmtbGoodsSq =  commonService.getNextSequence("SEQ_TMTB_GOODS");
+                regExceptGoods.setTmtbGoodsSq(tmtbGoodsSq);
+            }
+            regExceptGoods.setTmtbSq(tmtb.getTmtbSq());
+            regExceptGoods.setTargetVal(regExceptGoods.getGoodsCd());
+            regExceptGoods.setRegNo(tmtb.getRegNo());
+            regExceptGoods.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterGoods(regExceptGoods);
+        }
+
+        // 다다익선 할인구간 저장
+        Collection<MoreBetterSection> sectionGbList = tmtb.getSectionGbListNew();
+        for(MoreBetterSection regSection : sectionGbList){
+            log.info("regSection.getTmtbSectionSq = {}",regSection.getTmtbSectionSq());
+            log.info("regSection.getTmtbValSq = {}",regSection.getTmtbValSq());
+            // 다다익선 할인구간설정 2차조건(TB_TMTB_SECTION) 저장
+            // tmtbSectionSq 생성
+            if("".equals(regSection.getTmtbSectionSq()) || regSection.getTmtbSectionSq() == null){
+                Integer tmtbSectionSq =  commonService.getNextSequence("SEQ_TMTB_SECTION");
+                regSection.setTmtbSectionSq(tmtbSectionSq);
+            }
+            // 다다익선 조건에 따른 할인혜택(금액할인) 설정(TB_TMTB_VAL) 저장
+            // tmtbValSq 생성
+            if("".equals(regSection.getTmtbValSq()) || regSection.getTmtbValSq() == null){
+                Integer tmtbValSq =  commonService.getNextSequence("SEQ_TMTB_VAL");
+                regSection.setTmtbValSq(tmtbValSq);
+            }
+            regSection.setTmtbSq(tmtb.getTmtbSq());
+            regSection.setRegNo(tmtb.getRegNo());
+            regSection.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterSection(regSection);
+            morebetterDao.saveMorebetterVal(regSection);
+        }
+
+        // 다다익선 업체분담율(TB_TMTB_BURDEN) 저장
+        Collection<MoreBetterBurden> burdenList = tmtb.getBurdenListNew();
+        for (MoreBetterBurden regBurden : burdenList) {
+            // tmtbBurdenSq 생성
+            log.info("regBurden.getTmtbBurdenSq = {}",regBurden.getTmtbBurdenSq());
+            if("".equals(regBurden.getTmtbBurdenSq())){
+                Integer tmtbBurdenSq =  commonService.getNextSequence("SEQ_TMTB_BURDEN");
+                regBurden.setTmtbBurdenSq(tmtbBurdenSq);
+            }
+            regBurden.setTmtbSq(tmtb.getTmtbSq());
+            regBurden.setRegNo(tmtb.getRegNo());
+            regBurden.setUdpNo(tmtb.getUdpNo());
+
+            morebetterDao.saveMorebetterBurden(regBurden);
+        }
+
+        log.info("newBurdenSq = {}, newTmtbSq = {}, newSupplyCd = {}, newBurdenRate = {} , newUseYn = {}");
+    }
+
+    /**
+     * 다다익선 공급업체 삭제
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 5
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbSupplyCompanyList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrCompanySq() == null && moreBetterGoods.getArrCompanySq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrCompanySq().length > 0) {
+            morebetterDao.deleteTmtbSupplyCompanyList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 브랜드 삭제
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbBrandList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrBrandSq() == null && moreBetterGoods.getArrBrandSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrBrandSq().length > 0) {
+            morebetterDao.deleteTmtbBrandList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 적용상품 삭제
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbApplyGoodsList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrApplyGoodsSq() == null && moreBetterGoods.getArrApplyGoodsSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrApplyGoodsSq().length > 0) {
+            morebetterDao.deleteTmtbApplyGoodsList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 제외상품 삭제
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbExceptGoodsList(MoreBetterGoods moreBetterGoods) {
+        if (moreBetterGoods == null || (moreBetterGoods.getArrExceptGoodsSq() == null && moreBetterGoods.getArrExceptGoodsSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterGoods.getArrExceptGoodsSq().length > 0) {
+            morebetterDao.deleteTmtbExceptGoodsList(moreBetterGoods);
+        }
+    }
+
+    /**
+     * 다다익선 다다익선 할인구간 삭제
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 5
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbSectionValList(MoreBetterSection moreBetterSection) {
+        if (moreBetterSection == null || (moreBetterSection.getArrSecionSq() == null && moreBetterSection.getArrSecionSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterSection.getArrSecionSq().length > 0) {
+            morebetterDao.deleteTmtbSectionList(moreBetterSection);
+            morebetterDao.deleteTmtbValList(moreBetterSection);
+        }
+    }
+
+    /**
+     * 다다익선 제외상품 삭제
+     * @param tmtb
+     * @return
+     * @author bin2107
+     * @since 2021. 1. 16
+     */
+    @Transactional("shopTxnManager")
+    public void deleteTmtbBurdenList(MoreBetterBurden moreBetterBurden) {
+        if (moreBetterBurden == null || (moreBetterBurden.getArrBurdenSq() == null && moreBetterBurden.getArrBurdenSq().length <= 0)) {
+            throw new IllegalStateException(message.getMessage("FAIL_1001"));
+        }
+
+        if (moreBetterBurden.getArrBurdenSq().length > 0) {
+            morebetterDao.deleteTmtbBurdenList(moreBetterBurden);
+        }
+    }
+    /* // CSB 진행 */
+}

+ 142 - 115
style24.admin/src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1,45 +1,27 @@
 package com.style24.admin.biz.web;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.style24.admin.biz.service.TsaBusinessService;
-import com.style24.admin.biz.service.TsaCommonService;
-import com.style24.admin.biz.service.TsaMarketingService;
-import com.style24.admin.biz.service.TsaRendererService;
-import com.style24.admin.biz.service.TsaSystemService;
+import com.gagaframework.web.parameter.GagaMap;
+import com.gagaframework.web.rest.server.GagaResponse;
+import com.style24.admin.biz.service.*;
 import com.style24.admin.support.controller.TsaBaseController;
 import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.message.TscMessageByLocale;
 import com.style24.persistence.TsaPageRequest;
-import com.style24.persistence.domain.CommonCode;
-import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.FreeGoodsPromotion;
-import com.style24.persistence.domain.MoreBetter;
-import com.style24.persistence.domain.MoreBetterBurden;
-import com.style24.persistence.domain.MoreBetterGoods;
-import com.style24.persistence.domain.MoreBetterSection;
+import com.style24.persistence.domain.*;
 
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponse;
-
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
 /**
  * 마케팅 Controller
  * @author xodud1202
@@ -71,6 +53,9 @@ public class TsaMarketingController extends TsaBaseController {
 	@Autowired
 	private TsaSystemService systemService;
 
+	@Autowired
+	private TsaMorebetterService morebetterService;
+
 	/* xodud1202 진행 */
 	/**
 	 * 사은품 프로모션 관리 화면
@@ -94,7 +79,7 @@ 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> marketingList = (ArrayList<FreeGoodsPromotion>) marketingService.getFreeGoodsPromotionList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
@@ -106,6 +91,7 @@ public class TsaMarketingController extends TsaBaseController {
 		return result;
 	}
 
+
 	/**
 	 * 사은품 프로모션 등록 팝업창
 	 * @param param
@@ -128,6 +114,7 @@ public class TsaMarketingController extends TsaBaseController {
 		return mav;
 	}
 
+
 	/* // xodud1202 진행 */
 
 	/* JSM 진행 */
@@ -137,15 +124,15 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2020-12-21
 	 */
 	@GetMapping("/coupon/form")
-	public ModelAndView couponListForm() {
+	public ModelAndView couponListForm(){
 		ModelAndView mav = new ModelAndView();
 
 		// 쿠폰 유형 조회
-		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230"));
+		mav.addObject("cpnTypeList" ,  rendererService.getCommonCodeList("G230"));
 		// 할인 유형 조회
-		mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
+		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
 		// 사이트 조회
-		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
 
 		mav.setViewName("marketing/CouponListForm");
 
@@ -161,8 +148,8 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@PostMapping("/coupon/list")
 	@ResponseBody
-	public GagaMap getCouponList(@RequestBody Coupon param) {
-		GagaMap result = new GagaMap();
+	public GagaMap getCouponList(@RequestBody Coupon param){
+		GagaMap result =  new GagaMap();
 
 		ArrayList<Coupon> cpnList = marketingService.getCouponList(param);
 		int cpnTotCnt = marketingService.getCouponListCnt(param);
@@ -171,9 +158,9 @@ public class TsaMarketingController extends TsaBaseController {
 		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
 		param.getPageable().setTotalCount(cpnTotCnt);
 
-		result.set("pageing", param);
-		result.set("cpnTotCnt", cpnTotCnt);
-		result.set("cpnList", cpnList);
+		result.set("pageing" , param);
+		result.set("cpnTotCnt" , cpnTotCnt);
+		result.set("cpnList" , cpnList);
 
 		return result;
 	}
@@ -192,10 +179,10 @@ public class TsaMarketingController extends TsaBaseController {
 
 		// 일시 시 리스트 세팅
 		Collection<CommonCode> hhList = new ArrayList<CommonCode>();
-		for (int i = 0; i < 24; i++) {
+		for(int i = 0; i < 24; i++) {
 			num = "";
 			CommonCode temp = new CommonCode();
-			if (i < 10) {
+			if(i < 10) {
 				num = "0" + i;
 			} else {
 				num = String.valueOf(i);
@@ -206,44 +193,44 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
 
 			temp.setCd(num);
-			temp.setCdNm(num + "시");
+			temp.setCdNm(num+"시");
 
 			hhList.add(temp);
 		}
 		// 일시 분 리스트 세팅
 		Collection<CommonCode> mmList = new ArrayList<CommonCode>();
-		for (int i = 0; i < 60; i++) {
+		for(int i = 0 ; i < 60; i++) {
 			num = "";
 			CommonCode temp = new CommonCode();
-			if (i < 10) {
+			if(i < 10) {
 				num = "0" + i;
 			} else {
 				num = String.valueOf(i);
 			}
 			temp.setCd(num);
-			temp.setCdNm(num + "분");
+			temp.setCdNm(num+"분");
 
 			mmList.add(temp);
 		}
 
 		// 쿠폰 유형 조회
-		mav.addObject("cpnTypeList", rendererService.getCommonCodeList("G230"));
+		mav.addObject("cpnTypeList" ,  rendererService.getCommonCodeList("G230"));
 		// 사용가능 고객구분 조회
 		mav.addObject("usableCustGbList", rendererService.getCommonCodeList("G100"));
 		// 사용가능 고객등급 조회
 		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
 		// 사이트코드 조회
-		mav.addObject("siteCdList", rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteCdList" , rendererService.getCommonCodeList("G000"));
 		// 재발급 여부 조회
-		mav.addObject("reissuanceList", rendererService.getCommonCodeList("G231"));
+		mav.addObject("reissuanceList" , rendererService.getCommonCodeList("G231"));
 		// 할인방식 조회
-		mav.addObject("dcWayList", rendererService.getCommonCodeList("G240"));
+		mav.addObject("dcWayList" , rendererService.getCommonCodeList("G240"));
 		// 쿠폰다운로드 방식 조회
-		mav.addObject("dnGbList", rendererService.getCommonCodeList("G058"));
+		mav.addObject("dnGbList" , rendererService.getCommonCodeList("G058"));
 		// 시간 분 리스트 세팅
-		mav.addObject("mmList", mmList);
+		mav.addObject("mmList" , mmList);
 		// 시간 시 리스트 세팅
-		mav.addObject("hhList", hhList);
+		mav.addObject("hhList" , hhList);
 
 		mav.setViewName("marketing/CouponCreatePopupForm");
 		return mav;
@@ -274,7 +261,7 @@ public class TsaMarketingController extends TsaBaseController {
 	public GagaMap getMorebetterList(@RequestBody MoreBetter param) {
 		GagaMap result = new GagaMap();
 
-		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>)marketingService.getMorebetterList(param);
+		List<MoreBetter> tmtbList = (ArrayList<MoreBetter>) morebetterService.getMorebetterList(param);
 
 		param.setRegNo(TsaSession.getInfo().getUserNo()); // 엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		param.setPageable(new TsaPageRequest(param.getPageNo() - 1, param.getPageSize()));
@@ -296,41 +283,59 @@ public class TsaMarketingController extends TsaBaseController {
 	 */
 	@ResponseBody
 	@GetMapping("/morebetterRegPopup/form")
-	public ModelAndView morebetterRegForm(MoreBetter tmtb) {
+	public ModelAndView morebetterRegForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "tmtbSeq", required = false) Integer tmtbSeq,MoreBetter tmtb) {
 		ModelAndView mav = new ModelAndView();
 
 		// 상품상태 : 등록일때는 '대기'
 		String[] exceptCds = {"G008_00"};
 		mav.addObject("goodsStatList", rendererService.getCommonCodeList("G008", "Y", exceptCds));
-		log.info("CHECK param goodsStatList>>" + rendererService.getCommonCodeList("G008", "Y", exceptCds));
 
 		// 할인구간 목록
 		mav.addObject("sectionGbList", rendererService.getAvailCommonCodeList("G810"));
-		log.info("CHECK param sectionGbList>>" + rendererService.getAvailCommonCodeList("G810"));
+
 		// 할인구분 목록
 		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
-		log.info("CHECK param dcWayList>>" + rendererService.getAvailCommonCodeList("G240"));
 
 		// 적용 상품구분 목록
-		String[] exceptGoodsCds = {"G800_30", "G800_40"};
+		String[] exceptGoodsCds = {"G800_30","G800_40"};
 		mav.addObject("applyGoodsGbList", rendererService.getCommonCodeList("G800", "Y", exceptGoodsCds));
-		log.info("CHECK param applyGoodsGbList>>" + rendererService.getCommonCodeList("G800", "Y", exceptGoodsCds));
 
 		// 제외 상품구분 목록
 		mav.addObject("exceptGoodsGbList", rendererService.getAvailCommonCodeList("G800"));
-		log.info("CHECK param exceptGoodsGbList>>" + rendererService.getAvailCommonCodeList("G800"));
 
-		// 이것도 리스트 받아와서 바꿔야함 ㅠㅠ
-		String tmtbStat = "G232_10";
-		tmtb.setTmtbStat(tmtbStat);
+		// 다다익선 상태 목록
+		mav.addObject("tmtbStatList", rendererService.getAvailCommonCodeList("G232"));
 
-		//tmtb sq 자동생성 추가해야함
+		//tmtb sq 자동생성
 		Integer tmtbSq;
-		tmtbSq = commonService.getNextSequence("SEQ_TMTB");
-		tmtb.setTmtbSq(tmtbSq);
+		if("N".equals(mode)){
+			tmtbSq =  commonService.getNextSequence("SEQ_TMTB");
+			tmtb.setTmtbSq(tmtbSq);
+		}
 
+		if("U".equals(mode)){
+			// 다다익선 정보
+			mav.addObject("tmtbMstInfo", morebetterService.getMorebetterMstInfo(tmtbSeq));
+			mav.addObject("tmtbSupplyCompList", morebetterService.getMorebetterSupplyCompList(tmtbSeq,"G260_13"));
+			mav.addObject("tmtbBrandList", morebetterService.getMorebetterBrandList(tmtbSeq,"G260_12"));
+			mav.addObject("tmtbApplyGoodsList", morebetterService.getMorebetterApplyGoodsList(tmtbSeq,"G260_10"));
+			mav.addObject("tmtbExceptGoodsList", morebetterService.getMorebetterExceptGoodsList(tmtbSeq,"G260_10"));
+			mav.addObject("tmtbSectionValList", morebetterService.getMorebetterSectionValList(tmtbSeq));
+			mav.addObject("tmtbBurdenList", morebetterService.getMorebetterBurdenList(tmtbSeq));
+		}else{
+			mav.addObject("tmtbMstInfo", new MoreBetter());
+			mav.addObject("tmtbSupplyCompList", new MoreBetterGoods());
+			mav.addObject("tmtbBrandList", new MoreBetterGoods());
+			mav.addObject("tmtbApplyGoodsList", new MoreBetterGoods());
+			mav.addObject("tmtbExceptGoodsList", new MoreBetterGoods());
+			mav.addObject("tmtbSectionValList", new MoreBetterSection());
+			mav.addObject("tmtbBurdenList", new MoreBetterBurden());
+		}
+
+		mav.addObject("mode", mode);
+		mav.addObject("tmtbSeq", tmtbSeq);
 		mav.addObject("params", tmtb);
-		log.info("CHECK param tmtbSq>>" + tmtb.getTmtbSq());
+		log.info("CHECK param tmtbSq::{}", tmtb.getTmtbSq());
 		mav.setViewName("marketing/MorebetterRegForm");
 		return mav;
 	}
@@ -413,7 +418,7 @@ public class TsaMarketingController extends TsaBaseController {
 			e.printStackTrace();
 		}
 
-		log.info("tmtb::" + tmtb);
+		log.info("tmtb::{}", tmtb);
 
 		tmtb.setSupplyCompListNew(tmtbSupplyCompList);
 		tmtb.setBrandListNew(tmtbBrandList);
@@ -422,76 +427,98 @@ public class TsaMarketingController extends TsaBaseController {
 		tmtb.setSectionGbListNew(tmtbSectionGbList);
 		tmtb.setBurdenListNew(tmtbBurdenList);
 
-		marketingService.saveMoreBetterDetail(tmtb);
+		morebetterService.saveMoreBetterDetail(tmtb);
 
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
-
 	/**
-	 * 다다익선 할인구간 삭제
+	 * 다다익선 공급업체 삭제
 	 *
 	 * @param
 	 * @return
 	 * @author bin2107
-	 * @since 2021. 1. 5
+	 * @since 2021. 1. 12
 	 */
-	@PostMapping("/morebetter/sectionVal/delete")
+	@PostMapping("/morebetter/supplyCompany/delete")
 	@ResponseBody
-	public GagaResponse deleteSectionValList(@RequestBody Collection<MoreBetterSection> sectionValList) {
-		// 추후에 더 개발 ㅠㅠ
-		log.info("[deleteSectionValList]");
-		marketingService.deleteSectionValList(sectionValList);
+	public GagaResponse deleteTmtbSupplyCompanyList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbSupplyCompanyList(moreBetterGoods);
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
-	/* // CSB 진행 */
-
 	/**
-	 * 쿠폰조회 팝업
-	 * @param returnCode - 반환할코드. 필수
-	 * @param returnName - 반환할명칭. 필수
-	 * @param cpnNm - 쿠폰명. 옵션
+	 * 다다익선 브랜드 삭제
+	 *
+	 * @param
 	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
+	 * @author bin2107
+	 * @since 2021. 1. 12
 	 */
-	@GetMapping("/coupon/retrieve/form")
+	@PostMapping("/morebetter/brand/delete")
 	@ResponseBody
-	public ModelAndView couponRetrieveForm(@RequestParam(value = "returnCode") String returnCode, @RequestParam(value = "returnName") String returnName, @RequestParam(value = "cpnNm", required = false) String cpnNm) {
-		ModelAndView mav = new ModelAndView();
-
-		mav.addObject("returnCode", returnCode);
-		mav.addObject("returnName", returnName);
-		mav.addObject("cpnNm", StringUtils.defaultString(cpnNm, ""));
-
-		// 사이트 목록
-		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
-
-		// 사용가능고객구분 목록
-		mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
-
-		// 쿠폰유형 목록
-		mav.addObject("cpnTypeList", rendererService.getAvailCommonCodeList("G230"));
-
-		// 할인방식 목록
-		mav.addObject("dcWayList", rendererService.getAvailCommonCodeList("G240"));
+	public GagaResponse deleteTmtbBrandList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbBrandList(moreBetterGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
 
-		mav.setViewName("marketing/CouponRetrieveForm");
+	/**
+	 * 다다익선 적용상품 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 12
+	 */
+	@PostMapping("/morebetter/applyGoods/delete")
+	@ResponseBody
+	public GagaResponse deleteTmtbApplyGoodsList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbApplyGoodsList(moreBetterGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
 
-		return mav;
+	/**
+	 * 다다익선 제외상품 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 12
+	 */
+	@PostMapping("/morebetter/exceptGoods/delete")
+	@ResponseBody
+	public GagaResponse deleteTmtbExceptGoodsList(@RequestBody MoreBetterGoods moreBetterGoods) {
+		morebetterService.deleteTmtbExceptGoodsList(moreBetterGoods);
+		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * 쿠폰조회 목록
-	 * @param coupon - 쿠폰 정보
+	 * 다다익선 할인구간 삭제
+	 *
+	 * @param
 	 * @return
-	 * @author gagamel
-	 * @since 2021. 1. 8
+	 * @author bin2107
+	 * @since 2021. 1. 5
 	 */
-	@PostMapping("/coupon/retrieve/list")
+	@PostMapping("/morebetter/sectionVal/delete")
 	@ResponseBody
-	public Collection<Coupon> getCouponRetrieveList(@RequestBody Coupon coupon) {
-		return marketingService.getCouponRetrieveList(coupon);
+	public GagaResponse deleteTmtbSectionValList(@RequestBody MoreBetterSection moreBetterSection) {
+		morebetterService.deleteTmtbSectionValList(moreBetterSection);
+		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
+	/**
+	 * 다다익선 업체분담율 삭제
+	 *
+	 * @param
+	 * @return
+	 * @author bin2107
+	 * @since 2021. 1. 12
+	 */
+	@PostMapping("/morebetter/burden/delete")
+	@ResponseBody
+	public GagaResponse deleteTmtbBurdenList(@RequestBody MoreBetterBurden moreBetterBurden) {
+		morebetterService.deleteTmtbBurdenList(moreBetterBurden);
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+	/* // CSB 진행 */
 }

+ 3 - 0
style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterBurden.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
@@ -26,4 +27,6 @@ public class MoreBetterBurden extends TscBaseDomain {
 	//private String supplyCompCd;
 	private String burdenRate;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrBurdenSq;
 }

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

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TsaPageRequest;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
@@ -34,4 +35,15 @@ public class MoreBetterGoods extends TscBaseDomain {
 	private String goodsCd;
 	private String goodsNm;
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrCompanySq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrBrandSq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrApplyGoodsSq;
+
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrExceptGoodsSq;
 }

+ 4 - 0
style24.admin/src/main/java/com/style24/persistence/domain/MoreBetterSection.java

@@ -1,5 +1,6 @@
 package com.style24.persistence.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.style24.persistence.TscBaseDomain;
 import lombok.Data;
 
@@ -29,4 +30,7 @@ public class MoreBetterSection extends TscBaseDomain {
 	private Integer udpNo;			// 수정자
 	private String  udtDt;			// 수정일시
 
+	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+	private String[] arrSecionSq;
+
 }

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

@@ -135,213 +135,4 @@
 	</select>
 	<!-- // JSM 진행 -->
 
-	<!-- // CSB 진행 -->
-	<select id="getMorebetterList" parameterType="MoreBetter" resultType="MoreBetter">
-		/* TsaMarketing.getMorebetterList */
-		SELECT TMTB_SQ
-			 , TMTB_NM
-			 , FN_GET_CODE_NM('G232',TMTB_STAT) as TMTB_STAT
-			 , DATE_FORMAT(TMTB_ST_DT, '%Y.%m.%d') AS TMTB_STDT
-			 , DATE_FORMAT(TMTB_ED_DT, '%Y.%m.%d') AS TMTB_EDDT
-			 , DEL_YN
-			 , FN_GET_USER_NM(REG_NO) AS REG_NM
-			 , DATE_FORMAT(REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
-			 , FN_GET_USER_NM(UDP_NO) AS UPD_NM
-			 , DATE_FORMAT(UDT_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
-		FROM TB_TMTB
-		WHERE 1=1
-		<if test="tmtbStdt != null and tmtbStdt != '' and tmtbEddt != null and tmtbEddt != ''">
-			AND DATE_FORMAT(TMTB_ST_DT,'%Y%m%d%H%i%S') >= DATE_FORMAT(#{tmtbStdt} , '%Y%m%d%H%i%S')
-			AND DATE_FORMAT(TMTB_ED_DT,'%Y%m%d%H%i%S') <![CDATA[ <= ]]> DATE_FORMAT(#{tmtbEddt} , '%Y%m%d%H%i%S')
-		</if>
-		<if test="searchTxt != null and searchTxt != ''">
-			<if test="searchGubun != null and searchGubun == 'tmtbSq'">
-				AND TMTB_SQ = #{searchTxt}
-			</if>
-			<if test="searchGubun != null and searchGubun == 'tmtbNm'">
-				AND TMTB_NM = #{searchTxt}
-			</if>
-		</if>
-		ORDER BY REG_DT DESC
-	</select>
-
-	<insert id="saveMorebetterMst" parameterType="MoreBetter" >
-		/* TsaMarketing.saveMorebetterMst */
-		INSERT INTO TB_TMTB(
-					 TMTB_SQ
-					,TMTB_NM
-					,TMTB_STAT
-					,TMTB_ST_DT
-					,TMTB_ED_DT
-					,MULTI_YN
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-			         #{tmtbSq}
-					,#{tmtbNm}
-				    ,#{tmtbStat}
-				    ,#{tmtbStdt}
-				    ,#{tmtbEddt}
-				    ,#{multiYn}
-				    ,'N'
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterGoods" parameterType="MoreBetterGoods" >
-		/* TsaMarketing.saveMorebetterGoods */
-		INSERT INTO TB_TMTB_GOODS(
-		         	 TMTB_GOODS_SQ
-		        	,TMTB_SQ
-					,GOODS_GB
-					,TARGET_GB
-					,TARGET_VAL
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-			         #{tmtbGoodsSq}
-			        ,#{tmtbSq}
-				    ,#{goodsGb}
-				    ,#{targetGb}
-				    ,#{targetVal}
-				    ,'N'
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterSection" parameterType="MoreBetterSection" >
-		/* TsaMarketing.saveMorebetterSection */
-		INSERT INTO TB_TMTB_SECTION(
-					 TMTB_SECTION_SQ
-					,TMTB_SQ
-					,SECTION_GB
-					,SECTION_VAL
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-					 #{tmtbSectionSq}
-					,#{tmtbSq}
-					,#{sectionGb}
-				    ,#{sectionVal}
-				    ,'N'
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterVal" parameterType="MoreBetterSection" >
-		/* TsaMarketing.saveMorebetterVal */
-		INSERT INTO TB_TMTB_VAL(
-					 TMTB_VAL_SQ
-					,TMTB_SQ
-					,TMTB_SECTION_SQ
-					,DC_WAY
-					,DC_VAL
-					,DEL_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-					#{tmtbValSq}
-				   ,#{tmtbSq}
-				   ,#{tmtbSectionSq}
-				   ,#{dcWay}
-				   ,#{dcVal}
-				   ,'N'
-				   ,#{regNo}
-				   ,NOW()
-				   ,#{udpNo}
-				   ,NOW()
-				   )
-	</insert>
-
-	<insert id="saveMorebetterBurden" parameterType="MoreBetterBurden" >
-		/* TsaMarketing.saveMorebetterBurden */
-		INSERT INTO TB_TMTB_BURDEN(
-					 TB_TMTB_BURDEN_SQ
-					,TMTB_SQ
-					,TMTB_SUPPLY_CD
-					,TMTB_BURDEN_RATE
-					,USE_YN
-					,REG_NO
-					,REG_DT
-					,UDP_NO
-					,UDT_DT
-			)
-			VALUES (
-			         #{tmtbBurdenSq}
-			        ,#{tmtbSq}
-			        ,#{tmtbSupplyCd}
-			        ,#{tmtbBurdenRate}
-			        ,#{useYn}
-				    ,#{regNo}
-				    ,NOW()
-				    ,#{udpNo}
-				    ,NOW()
-				   )
-		ON DUPLICATE KEY UPDATE
-					 TMTB_SUPPLY_CD = #{tmtbSupplyCd}
-					,TMTB_BURDEN_RATE = #{tmtbBurdenRate}
-					,USE_YN = #{useYn}
-					,UDP_NO = #{udpNo}
-					,UDT_DT = NOW()
-	</insert>
-	<!--// CSB 진행 -->
-	
-	<!-- 쿠폰조회 목록 -->
-	<select id="getCouponRetrieveList" parameterType="Coupon" resultType="Coupon">
-		/* TsaMarketing.getCouponRetrieveList */
-		SELECT A.CPN_ID                                               /*쿠폰ID*/
-		     , A.CPN_NM                                               /*쿠폰명*/
-		     , A.SITE_CD                                              /*사이트코드(공통코드G000)*/
-		     , A.USABLE_CUST_GB                                       /*사용가능고객구분(공통코드G100)*/
-		     , A.CPN_TYPE                                             /*쿠폰유형(공통코드G230)*/
-		     , A.DC_WAY                                               /*할인방식(공통코드G240)*/
-		     , A.DC_PVAL                                              /*할인값(PC). 할인방식이 금액이면 할인금액, 율이면 할인율*/
-		     , A.DC_MVAL                                              /*할인값(모바일). 할인방식이 금액이면 할인금액, 율이면 할인율*/
-		     , A.MAX_DC_AMT                                           /*최고할인값. 할인방식이 금액이면 최고할인금액, 율이면 최고할인율*/
-		     , A.PD_GB                                                /*기간/일수구분(P 기간, D 일수)*/
-		     , DATE_FORMAT(A.AVAIL_STDT,'%Y%m%d%H%i%S') AS AVAIL_STDT /*유효시작일시(기간/일수구분 "P 기간"일 때 사용됨)*/
-		     , DATE_FORMAT(A.AVAIL_EDDT,'%Y%m%d%H%i%S') AS AVAIL_EDDT /*유효종료일시(기간/일수구분 "P 기간"일 때 사용됨)*/
-		     , A.AVAIL_DAYS                                           /*유효일수(기간/일수구분 "D 일수"일 때 사용됨)*/
-		     , A.CUST_PUB_LIMIT_QTY                                   /*고객당발행제한수량(0은 무제한)*/
-		     , A.TOT_PUB_LIMIT_QTY                                    /*총발행제한수량(0은 무제한)*/
-		     , A.ONE_PUB_QTY                                          /*1회발행수량*/
-		     , A.DN_GB                                                /*다운로드구분(A:자동다운로드, D:직접다운로드). 다운로드가능여부가 "Y 다운로드가능"일 때만 사용됨*/
-		     , A.BUY_LIMIT_AMT                                        /*구매제한금액(0은 제한없음)*/
-		FROM   TB_COUPON A
-		WHERE  A.SITE_CD = #{siteCd}
-		<if test="cpnId !=null and cpnId !=''">
-		AND	   A.CPN_ID = #{cpnId}
-		</if>
-		<if test="cpnNm !=null and cpnNm !=''">
-		AND	   A.CPN_NM LIKE '%'||#{cpnNm}||'%'
-		</if>
-		<if test="cpnType !=null and cpnType !=''">
-		AND	   A.CPN_TYPE = #{cpnType}
-		</if>
-	</select>
-	
 </mapper>

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

@@ -0,0 +1,444 @@
+<?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.TsaMorebetterDao">
+	<!-- // CSB 진행 -->
+	<select id="getMorebetterList" parameterType="MoreBetter" resultType="MoreBetter">
+		/* TsaMarketing.getMorebetterList */
+		SELECT TMTB_SQ
+			 , TMTB_NM
+			 , FN_GET_CODE_NM('G232',TMTB_STAT) as TMTB_STAT
+			 , DATE_FORMAT(TMTB_ST_DT, '%Y.%m.%d') AS TMTB_STDT
+			 , DATE_FORMAT(TMTB_ED_DT, '%Y.%m.%d') AS TMTB_EDDT
+			 , DEL_YN
+			 , FN_GET_USER_NM(REG_NO) AS REG_NM
+			 , DATE_FORMAT(REG_DT, '%Y.%m.%d %H:%i:%S') AS REG_DT
+			 , FN_GET_USER_NM(UDP_NO) AS UPD_NM
+			 , DATE_FORMAT(UDT_DT, '%Y.%m.%d %H:%i:%S') AS UPD_DT
+		FROM TB_TMTB
+		WHERE 1=1
+		<if test="tmtbStdt != null and tmtbStdt != '' and tmtbEddt != null and tmtbEddt != ''">
+			AND DATE_FORMAT(TMTB_ST_DT,'%Y%m%d%H%i%S') >= DATE_FORMAT(#{tmtbStdt} , '%Y%m%d%H%i%S')
+			AND DATE_FORMAT(TMTB_ED_DT,'%Y%m%d%H%i%S') <![CDATA[ <= ]]> DATE_FORMAT(#{tmtbEddt} , '%Y%m%d%H%i%S')
+		</if>
+		<if test="searchTxt != null and searchTxt != ''">
+			<if test="searchGubun != null and searchGubun == 'tmtbSq'">
+				AND TMTB_SQ = #{searchTxt}
+			</if>
+			<if test="searchGubun != null and searchGubun == 'tmtbNm'">
+				AND TMTB_NM = #{searchTxt}
+			</if>
+		</if>
+		ORDER BY REG_DT DESC
+	</select>
+
+	<select id="getMorebetterMstInfo" parameterType="Integer" resultType="MoreBetter">
+		/* TsaMarketing.getMorebetterMstInfo */
+		SELECT	   	   TT.TMTB_SQ
+					 , TT.TMTB_NM
+					 , TT.TMTB_STAT
+					 , DATE_FORMAT(TT.TMTB_ST_DT , '%Y-%m-%d') AS TMTB_ST_DT
+					 , DATE_FORMAT(TT.TMTB_ED_DT , '%Y-%m-%d') AS TMTB_ED_DT
+					 , TT.MULTI_YN
+					 , TT.DEL_YN
+					 , TT.REG_NO
+					 , TT.REG_DT
+					 , TT.UDP_NO
+					 , TT.UDT_DT
+					 , TS.SECTION_GB
+					 , TS.SECTION_VAL
+					 , TV.DC_WAY
+					 , TV.DC_VAL
+		FROM 	TB_TMTB TT
+		INNER 	JOIN TB_TMTB_SECTION TS
+		ON 		TT.TMTB_SQ = TS.TMTB_SQ
+		INNER 	JOIN TB_TMTB_VAL TV
+		ON 		TT.TMTB_SQ = TV.TMTB_SQ
+		AND		TS.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
+		WHERE 	1=1
+		  AND 	TT.TMTB_SQ = #{tmtbSq}
+		LIMIT 1
+	</select>
+
+	<select id="getMorebetterSectionValList" parameterType="Integer" resultType="MoreBetterSection">
+		/* TsaMarketing.getMorebetterSectionValList */
+		SELECT    TS.TMTB_SQ
+				 ,TS.TMTB_SECTION_SQ
+				 ,TV.TMTB_VAL_SQ
+				 ,TS.SECTION_GB
+				 ,TS.SECTION_VAL
+				 ,TV.DC_WAY
+				 ,TV.DC_VAL
+				 ,TS.DEL_YN
+				 ,TS.REG_NO
+				 ,TS.REG_DT
+				 ,TS.UDP_NO
+				 ,TS.UDT_DT
+		FROM	TB_TMTB_SECTION TS
+		INNER 	JOIN TB_TMTB_VAL TV
+		ON 		TS.TMTB_SQ = TV.TMTB_SQ
+		AND		TS.TMTB_SECTION_SQ = TV.TMTB_SECTION_SQ
+		WHERE 	1=1
+		  AND 	TS.TMTB_SQ = #{tmtbSq}
+		ORDER BY TS.TMTB_SQ, TS.TMTB_SECTION_SQ, TV.TMTB_VAL_SQ
+	</select>
+
+	<select id="getMorebetterSupplyCompList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterSupplyCompList */
+		SELECT 	 TMTB_GOODS_SQ
+				 , TMTB_SQ
+				 , GOODS_GB
+				 , TARGET_GB
+				 , TARGET_VAL
+				 , TARGET_VAL AS SUPPLY_COMP_CD
+				 , FN_GET_SUPPLY_COMP_NM(TARGET_VAL) AS SUPPLY_COMP_NM
+				 , DEL_YN
+				 , REG_NO
+				 , REG_DT
+				 , UDP_NO
+				 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_13'
+	</select>
+
+	<select id="getMorebetterBrandList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterBrandList */
+		SELECT 	 TMTB_GOODS_SQ
+				 , TMTB_SQ
+				 , GOODS_GB
+				 , TARGET_GB
+				 , TARGET_VAL
+				 , TARGET_VAL AS BRAND_CD
+				 , (SELECT   BRAND_ENM
+					FROM  TB_BRAND
+					WHERE BRAND_CD = TARGET_VAL) AS BRAND_ENM
+				 , (SELECT   FN_GET_SUPPLY_COMP_NM(SUPPLY_COMP_CD)
+					FROM  TB_BRAND
+					WHERE BRAND_CD = TARGET_VAL) AS SUPPLY_COMP_NM
+				 , DEL_YN
+				 , REG_NO
+				 , REG_DT
+				 , UDP_NO
+				 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_12'
+	</select>
+
+	<select id="getMorebetterApplyGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterApplyGoodsList */
+		SELECT 	 TMTB_GOODS_SQ
+				 , TMTB_SQ
+				 , GOODS_GB
+				 , TARGET_GB
+				 , TARGET_VAL
+				 , TARGET_VAL AS GOODS_CD
+				 , (SELECT  GOODS_NM
+					FROM  TB_GOODS
+					WHERE  GOODS_CD = TARGET_VAL) AS GOODS_NM
+				 , DEL_YN
+				 , REG_NO
+				 , REG_DT
+				 , UDP_NO
+				 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_10'
+		  AND GOODS_GB IN ('G800_10','G800_20')
+	</select>
+
+	<select id="getMorebetterExceptGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
+		/* TsaMarketing.getMorebetterExceptGoodsList */
+		SELECT 	 TMTB_GOODS_SQ
+			 , TMTB_SQ
+			 , GOODS_GB
+			 , TARGET_GB
+			 , TARGET_VAL
+			 , TARGET_VAL AS GOODS_CD
+			 , (SELECT  GOODS_NM
+				FROM  TB_GOODS
+				WHERE  GOODS_CD = TARGET_VAL) AS GOODS_NM
+			 , DEL_YN
+			 , REG_NO
+			 , REG_DT
+			 , UDP_NO
+			 , UDT_DT
+		FROM TB_TMTB_GOODS
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+		  AND TARGET_GB = 'G260_10'
+		  AND GOODS_GB IN ('G800_30')
+	</select>
+
+	<select id="getMorebetterBurdenList" parameterType="Integer" resultType="MoreBetterBurden">
+		/* TsaMarketing.getMorebetterBurdenList */
+		SELECT 		TB_TMTB_BURDEN_SQ AS TMTB_BURDEN_SQ
+				   , TMTB_SQ
+				   , TMTB_SUPPLY_CD
+				   , TMTB_BURDEN_RATE
+				   , USE_YN
+				   , REG_NO
+				   , REG_DT
+				   , UDP_NO
+				   , UDT_DT
+		FROM TB_TMTB_BURDEN
+		WHERE 1=1
+		  AND TMTB_SQ = #{tmtbSq}
+	</select>
+
+	<insert id="saveMorebetterMst" parameterType="MoreBetter" >
+		/* TsaMarketing.saveMorebetterMst */
+		INSERT INTO TB_TMTB(
+					 TMTB_SQ
+					,TMTB_NM
+					,TMTB_STAT
+					,TMTB_ST_DT
+					,TMTB_ED_DT
+					,MULTI_YN
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+			         #{tmtbSq}
+					,#{tmtbNm}
+				    ,#{tmtbStat}
+				    ,#{tmtbStdt}
+				    ,#{tmtbEddt}
+				    ,#{multiYn}
+				    ,'N'
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 TMTB_NM = #{tmtbNm}
+						,TMTB_STAT = #{tmtbStat}
+						,TMTB_ST_DT = #{tmtbStdt}
+						,TMTB_ED_DT = #{tmtbEddt}
+						,MULTI_YN = #{multiYn}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterGoods" parameterType="MoreBetterGoods" >
+		/* TsaMarketing.saveMorebetterGoods */
+		INSERT INTO TB_TMTB_GOODS(
+		         	 TMTB_GOODS_SQ
+		        	,TMTB_SQ
+					,GOODS_GB
+					,TARGET_GB
+					,TARGET_VAL
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+			         #{tmtbGoodsSq}
+			        ,#{tmtbSq}
+				    ,#{goodsGb}
+				    ,#{targetGb}
+				    ,#{targetVal}
+				    ,'N'
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 GOODS_GB = #{goodsGb}
+						,TARGET_GB = #{targetGb}
+						,TARGET_VAL = #{targetVal}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterSection" parameterType="MoreBetterSection" >
+		/* TsaMarketing.saveMorebetterSection */
+		INSERT INTO TB_TMTB_SECTION(
+					 TMTB_SECTION_SQ
+					,TMTB_SQ
+					,SECTION_GB
+					,SECTION_VAL
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+					 #{tmtbSectionSq}
+					,#{tmtbSq}
+					,#{sectionGb}
+				    ,#{sectionVal}
+				    ,'N'
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 SECTION_GB = #{sectionGb}
+						,SECTION_VAL = #{sectionVal}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterVal" parameterType="MoreBetterSection" >
+		/* TsaMarketing.saveMorebetterVal */
+		INSERT INTO TB_TMTB_VAL(
+					 TMTB_VAL_SQ
+					,TMTB_SQ
+					,TMTB_SECTION_SQ
+					,DC_WAY
+					,DC_VAL
+					,DEL_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+					#{tmtbValSq}
+				   ,#{tmtbSq}
+				   ,#{tmtbSectionSq}
+				   ,#{dcWay}
+				   ,#{dcVal}
+				   ,'N'
+				   ,#{regNo}
+				   ,NOW()
+				   ,#{udpNo}
+				   ,NOW()
+				   )
+			ON DUPLICATE KEY UPDATE
+						 DC_WAY = #{dcWay}
+						,DC_VAL = #{dcVal}
+						,UDP_NO = #{udpNo}
+						,UDT_DT = NOW()
+	</insert>
+
+	<insert id="saveMorebetterBurden" parameterType="MoreBetterBurden" >
+		/* TsaMarketing.saveMorebetterBurden */
+		INSERT INTO TB_TMTB_BURDEN(
+					 TB_TMTB_BURDEN_SQ
+					,TMTB_SQ
+					,TMTB_SUPPLY_CD
+					,TMTB_BURDEN_RATE
+					,USE_YN
+					,REG_NO
+					,REG_DT
+					,UDP_NO
+					,UDT_DT
+			)
+			VALUES (
+			         #{tmtbBurdenSq}
+			        ,#{tmtbSq}
+			        ,#{tmtbSupplyCd}
+			        ,#{tmtbBurdenRate}
+			        ,#{useYn}
+				    ,#{regNo}
+				    ,NOW()
+				    ,#{udpNo}
+				    ,NOW()
+				   )
+		ON DUPLICATE KEY UPDATE
+					 TMTB_SUPPLY_CD = #{tmtbSupplyCd}
+					,TMTB_BURDEN_RATE = #{tmtbBurdenRate}
+					,USE_YN = #{useYn}
+					,UDP_NO = #{udpNo}
+					,UDT_DT = NOW()
+	</insert>
+
+	<delete id="deleteTmtbSupplyCompanyList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbSupplyCompanyList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrCompanySq != null and arrCompanySq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrCompanySq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbBrandList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbBrandList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrBrandSq != null and arrBrandSq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrBrandSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbApplyGoodsList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbApplyGoodsList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrApplyGoodsSq != null and arrApplyGoodsSq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrApplyGoodsSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbExceptGoodsList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbExceptGoodsList */
+		DELETE FROM TB_TMTB_GOODS
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrExceptGoodsSq != null and arrExceptGoodsSq.length>0">
+			AND TMTB_GOODS_SQ IN
+			<foreach collection="arrExceptGoodsSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbSectionList" parameterType="MoreBetterSection">
+		/* TsaMarketing.deleteTmtbSectionList */
+		DELETE FROM TB_TMTB_SECTION
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrSecionSq != null and arrSecionSq.length>0">
+			AND TMTB_SECTION_SQ IN
+			<foreach collection="arrSecionSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbValList" parameterType="MoreBetterSection">
+		/* TsaMarketing.deleteTmtbValList */
+		DELETE FROM TB_TMTB_VAL
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrSecionSq != null and arrSecionSq.length>0">
+			AND TMTB_SECTION_SQ IN
+			<foreach collection="arrSecionSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+
+	<delete id="deleteTmtbBurdenList" parameterType="MoreBetterGoods">
+		/* TsaMarketing.deleteTmtbBurdenList */
+		DELETE FROM TB_TMTB_BURDEN
+		WHERE TMTB_SQ =  #{tmtbSq}
+		<if test="arrBurdenSq != null and arrBurdenSq.length>0">
+			AND TB_TMTB_BURDEN_SQ IN
+			<foreach collection="arrBurdenSq" item="item" index="index"  open="(" close=")" separator=",">
+				#{item}
+			</foreach>
+		</if>
+	</delete>
+	<!--// CSB 진행 -->
+</mapper>

+ 11 - 5
style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterListForm.html

@@ -6,7 +6,7 @@
  * @source  : MorebetterListForm.html
  * @desc    : 다다익선 관리 페이지
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
@@ -21,8 +21,10 @@
 		<!-- //메인타이틀 영역 -->
 		
 		<!-- 메뉴 설명 -->
-		<!--<div class="infoBox menu-desc">
-		</div>-->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+
 		<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/morebetter/list'}">
 			<input type="hidden" id="searchGb" name="searchGb" />
 			<input type="hidden" id="imageViewYn" name="imageViewYn" />
@@ -102,7 +104,11 @@
 /*<![CDATA[*/
 	var columnDefs = [];
 	columnDefs = [
-		{headerName: "프로모션ID", field: "tmtbSq", width: 80, cellClass: 'text-center'},
+		{headerName: "프로모션ID", field: "tmtbSq", width: 80, cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return "<a href=\"javascript:void(0);\" onclick=\"cfnOpenMorebetterSetPopup('U','" + params.value + "');\">" + params.value + "</a>";
+			}
+		},
 		{headerName: "프로모션명", field: "tmtbNm", width: 200, cellClass: 'text-center'},
 		{headerName: "상태", field: "tmtbStat", width: 140, cellClass: 'text-center'},
 		{headerName: "시작일", field: "tmtbStdt", width: 140, cellClass: 'text-center'},
@@ -207,7 +213,7 @@
 
 	// 등록클릭시
 	$('#btnMorebetterReg').on('click', function() {
-		cfnOpenMorebetterSetPopup();
+		cfnOpenMorebetterSetPopup('N');
 	});
 
 

+ 296 - 72
style24.admin/src/main/webapp/WEB-INF/views/marketing/MorebetterRegForm.html

@@ -6,7 +6,7 @@
  * @source  : MorebetterRegForm.html
  * @desc    : 다다익선 등록 화면
  *============================================================================
- * SISUN
+ * STYLE24
  * Copyright(C) 2019 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
@@ -17,12 +17,12 @@
 	<div class="modalPopup frGoodsPro" data-width="1100">
 		<div class="panelStyle" style="max-height:900px;overflow-y:scroll;">
 			<div class="panelTitle">
-				<h2>다다익선 등록</h2>
+				<strong th:text="${'다다익선 ' + (mode == 'N' ? '등록' : '상세')}">다다익선 등록</strong>
 				<button type="button" class="close" onclick="fnMorebetterFormClose()"><i class="fa fa-times"></i></button>
 			</div>
 
 			<form id="moreBetterForm" name="moreBetterForm" action="#" th:action="@{'/marketing/morebetter/save'}"> <!--th:method="post" >-->
-				<input type="hidden" name="gbn" th:value="${params.gbn}" />				<!-- 신규/수정 구분 -->
+				<input type="hidden" name="mode" th:value="${mode}"/>
 				<input type="hidden" name="supplyCompList"/>			<!-- 공급업체 리스트 -->
 				<input type="hidden" name="brandList"/>					<!-- 브랜드 리스트 -->
 				<input type="hidden" name="applyGoodsList"/>			<!-- 적용상품 리스트 -->
@@ -66,7 +66,12 @@
 							<th>프로모션ID</th>
 							<td>
 								<!-- 프로모션 ID 입력 : before -->
-								<input class="w50p" type="text" id="disTmtbSq" name="disTmtbSq" maxlength="30" th:value="${params.tmtbSq}"  disabled=""/>
+								<label th:if="${mode == 'N'}">
+									<input class="w50p" type="text" id="disTmtbSq1" name="disTmtbSq" maxlength="30" th:value="${params.tmtbSq}" disabled=""/>
+								</label>
+								<label th:if="${mode == 'U'}">
+									<input class="w50p" type="text" id="disTmtbSq2" name="disTmtbSq" maxlength="30" th:value="${tmtbSeq}" disabled=""/>
+								</label>
 								<input type="hidden" id="tmtbSq" name="tmtbSq"/>
 							</td>
 						</tr>
@@ -79,8 +84,9 @@
 							</td>
 							<th>상태</th>
 							<td>
-								<!-- 상태 입력 : before -->
-								<input class="w50p" type="text" id="disTmtbStat" name="disTmtbStat" maxlength="30" th:value="${params.tmtbStat}" disabled=""/>
+								<!-- 상태 입력 : before
+								<input class="w50p" type="text" id="disTmtbStat" name="disTmtbStat" maxlength="30" th:value="${params.tmtbStat}" disabled=""/>-->
+								<label class="rdoBtn" th:if="${tmtbStatList}" th:each="oneData, status : ${tmtbStatList}" ><input type="radio" id="disTmtbStat" name="disTmtbStat" th:value="${oneData.cd}" th:text="${oneData.cdNm}" /></label>
 								<input type="hidden" id="tmtbStat" name="tmtbStat"/>
 							</td>
 						</tr>
@@ -137,7 +143,6 @@
 											<div class="padding10 inner-tb-solid">
 												<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddCompany">업체 추가</button>
 												<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteCompany">선택삭제</button>
-												<span>선택 : 00개</span>
 												<br/>
 												<div id="gridFGPromotionCompanyList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 											</div>
@@ -147,7 +152,6 @@
 											<div class="padding10 inner-tb-solid">
 												<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddBrand">브랜드 추가</button>
 												<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteBrand">선택삭제</button>
-												<span>선택 : 00개</span>
 												<br/>
 												<!-- 브랜드 선택 팝업(단수 선택 팝업... 복수를 새로 만들어야하는지 ? 아니면 변수처리해야하는지 ? -->
 												<div id="gridFGBrandList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
@@ -161,7 +165,6 @@
 										<div class="padding10">
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyGoods">상품 추가</button>
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteApplyGoods">선택삭제</button>
-											<span>선택 : 00개</span>
 											<br/>
 											<div id="gridFGApplyGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
@@ -194,7 +197,6 @@
 										<div class="padding10">
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddExceptGoods">상품 추가</button>
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDeleteExtGoods">선택삭제</button>
-											<span>선택 : 00개</span>
 											<br/>
 											<div id="gridFGExceptGoodsList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
@@ -227,7 +229,6 @@
 										<div class="padding10">
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddSectionRow">행추가</button>
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelSectionRow">행삭제</button>
-											<span>선택 : 00개</span>
 											<br/>
 											<div id="gridSectionGbList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
@@ -260,7 +261,6 @@
 										<div class="padding10">
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddApplyBurden">업체추가</button>
 											<button type="button" class="btn btnRight btn-success btn-lg" id="btnDelApplyBurden">선택삭제</button>
-											<span>선택 : 00개</span>
 											<br/>
 											<div id="gridApplyBurdenList" style="width:100%; height:200px;" class="ag-theme-balham"></div>
 										</div>
@@ -276,7 +276,8 @@
 				<li  class="right">
 					<!-- <th:block th:if="${sessionInfo.roleCd == 'G001_0000' OR sessionInfo.roleCd == 'G001_A000' OR sessionInfo.roleCd == 'G001_A101' OR sessionInfo.roleCd == 'G001_A100' OR sessionInfo.roleCd == 'G001_A001'}"> -->
 						<!--<button type="button" class="btn btnRight btn-success btn-lg" id="btnSearchList">목록</button>-->
-						<button type="button" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</button>
+						<button type="button" th:if="${mode == 'N'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterSave">저장</button>
+						<button type="button" th:if="${mode == 'U'}" class="btn btnRight btn-success btn-lg" id="btnMorebetterUpdate">수정</button>
 					<!--<button type="button" class="btn btnRight btn-success btn-lg" id="btnChangeStatIng">진행</button>
                     	<button type="button" class="btn btnRight btn-success btn-lg" id="btnPromotionDelete">삭제</button>
                     	<button type="button" class="btn btnRight btn-success btn-lg" id="btnPromotionStop">중지</button>-->
@@ -287,6 +288,17 @@
 	</div>
 
 	<script th:inline="javascript">
+		// 상세 조회시 데이터 리스트
+		var mode = [[${mode}]];
+		var tmtbMstInfo = [[${tmtbMstInfo}]];
+		var tmtbSectionValList = [[${tmtbSectionValList}]];
+		var tmtbSupplyCompList = [[${tmtbSupplyCompList}]];
+		var tmtbBrandList = [[${tmtbBrandList}]];
+		var tmtbApplyGoodsList = [[${tmtbApplyGoodsList}]];
+		var tmtbExceptGoodsList = [[${tmtbExceptGoodsList}]];
+		var tmtbBurdenList = [[${tmtbBurdenList}]];
+
+		// 공통 코드 리스트
 		var FGAddGoodsStatList = gagajf.convertToArray([[${goodsStatList}]]);		// 상품 상태 리스트
 		var sectionGbList = gagajf.convertToArray([[${sectionGbList}]]);	// 할인구간 리스트
 		var dcWayList = gagajf.convertToArray([[${dcWayList}]]);	// 할인구분 리스트
@@ -298,7 +310,8 @@
 			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 			{headerName: "공급처ID", field: "supplyCompCd", width: 120, cellClass: 'text-center'},
 			{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'}
+			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'},
+			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center'}
 		];
 		// 브랜드 리스트 설정
 		var columnBrandList = [
@@ -306,7 +319,8 @@
 			{headerName: "브랜드ID", field: "brandCd", width: 120, cellClass: 'text-center'},
 			{headerName: "브랜드명", field: "brandEnm", width: 120, cellClass: 'text-center'},
 			{headerName: "공급업체명", field: "supplyCompNm", width: 150, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'}
+			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'},
+			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center'}
 		];
 		// 적용상품 리스트 설정
 		var columnApplyGoodsList = [
@@ -320,7 +334,8 @@
 			//{headerName: "상품구분", field: "goodsGb", width: 120, cellClass: 'text-center'},
 			{headerName: "Product ID", field: "goodsCd", width: 120, cellClass: 'text-center'},
 			{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'}
+			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'},
+			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center'}
 		];
 		// 제외상품 리스트 설정
 		var columnExceptGoodsList = [
@@ -333,7 +348,8 @@
 			},
 			{headerName: "Product ID", field: "goodsCd", width: 120, cellClass: 'text-center'},
 			{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
-			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'}
+			{headerName: "적용대상", field: "targetGb", width: 150, cellClass: 'text-center'},
+			{headerName: "시퀀스", field: "tmtbGoodsSq", width: 150, cellClass: 'text-center'}
 			/*{headerName: "Product ID", field: "goodsCd", width: 120, cellClass: 'text-center'},
 			{headerName: "브랜드명", field: "brandEnm", width: 150, cellClass: 'text-center'},
 			{headerName: "상품명", field: "goodsNm", width: 120, cellClass: 'text-center'},
@@ -352,7 +368,8 @@
 			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 			{headerName: "업체ID", field: "tmtbSupplyCd" , width: 120, cellClass: 'text-center'},
 			{headerName: "분담율(%)", field: "tmtbBurdenRate" , width: 120, cellClass: 'text-center',editable: true, required: true},
-			{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center'}
+			{headerName: "사용여부", field: "useYn" , width: 120, cellClass: 'text-center'},
+			{headerName: "시퀀스", field: "tmtbBurdenSq", width: 150, cellClass: 'text-center'}
 		];
 
 		// 구간 할인/혜택 설정
@@ -379,7 +396,9 @@
 			{headerName: "할인값", field: "dcVal", width: 100, cellClass: 'text-right',
 				cellEditor: 'textCellEditor',
 				cellEditorParams: { maxlength: 50, required: true }
-			}
+			},
+			{headerName: "구간시퀀스", field: "tmtbSectionSq", width: 150, cellClass: 'text-center'},
+			{headerName: "할인값시퀀스", field: "tmtbValSq", width: 150, cellClass: 'text-center'}
 		];
 
 		// 공급업체 리스트 설정
@@ -409,6 +428,7 @@
 		gridOptionsSectionGbList.stopEditingWhenGridLosesFocus = true;
 
 		$(document).ready(function() {
+			// 1.그리드 그리기
 			gagaAgGrid.createGrid("gridFGPromotionCompanyList", gridOptionsFGCompanyList);
 			gagaAgGrid.createGrid("gridFGBrandList", gridOptionsFGBrandList);
 			gagaAgGrid.createGrid("gridFGApplyGoodsList", gridOptionsFGApplyGoodsList);
@@ -416,24 +436,115 @@
 			gagaAgGrid.createGrid("gridApplyBurdenList", gridOptionsApplyBurdenList);
 			gagaAgGrid.createGrid("gridSectionGbList", gridOptionsSectionGbList);
 
+			// 2. 그리드 데이터 바인딩
+			if(mode == "U"){
+				gridOptionsFGCompanyList.api.setRowData(tmtbSupplyCompList);
+				gridOptionsFGBrandList.api.setRowData(tmtbBrandList);
+				gridOptionsFGApplyGoodsList.api.setRowData(tmtbApplyGoodsList);
+				gridOptionsFGExceptGoodsList.api.setRowData(tmtbExceptGoodsList);
+				gridOptionsSectionGbList.api.setRowData(tmtbSectionValList)
+				gridOptionsApplyBurdenList.api.setRowData(tmtbBurdenList);
+
+				$('#moreBetterForm input[name=tmtbNm]').val(tmtbMstInfo.tmtbNm);
+				$('#moreBetterForm input[name=tmtbStdt]').val(tmtbMstInfo.tmtbStdt);
+				$('#moreBetterForm input[name=tmtbEddt]').val(tmtbMstInfo.tmtbEddt);
+				$("input:radio[name='disTmtbStat']:radio[value="+tmtbMstInfo.tmtbStat+"]").prop('checked', true); // 선택하기
+				$("input:radio[name='sectionGb']:radio[value="+tmtbMstInfo.sectionGb+"]").prop('checked', true); // 선택하기
+				$("input:radio[name='dcWay']:radio[value="+tmtbMstInfo.dcWay+"]").prop('checked', true); // 선택하기
+				$("input:radio[name='multiYn']:radio[value="+tmtbMstInfo.multiYn+"]").prop('checked', true); // 선택하기
+
+			}
+
+			// 구분 -> 대기로 체크
+			if(mode=="N"){
+				$("input:radio[name='disTmtbStat']:radio[value='G232_10']").prop('checked', true); // 선택하기
+			}
 			cfnCreateCalendar('#tmtbTerms', 'tmtbStdt', 'tmtbEddt', true, '행사기간', 'X');
 		});
 
+		// 수정 버튼 클릭시
+		$('#btnMorebetterUpdate').on('click', function() {
+			// 행사기간 확인
+			let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
+			let toDate = $('#moreBetterForm input[name=tmtbEddt]').val();
+
+			if (gagajf.isNull(fromDate) || gagajf.isNull(toDate)) {
+				mcxDialog.alert("행사 기간 시작일자와 종료일자를 입력하세요.");
+				$('#moreBetterForm input[name=tmtbStdt]').focus();
+				return false;
+			}
+
+			if (fromDate > toDate) {
+				mcxDialog.alert("시작일자는 종료일자 보다 클 수 없습니다.");
+				$('#moreBetterForm input[name=tmtbStdt]').focus();
+				return false;
+			}
+
+			// validation
+			if (!gagajf.validation('#moreBetterForm'))
+				return false;
+
+			// disabled 값 넘겨주기
+			$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
+			$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
+
+			mcxDialog.confirm('수정하시겠습니까?', {
+				cancelBtnText: "취소",
+				sureBtnText: "확인",
+				sureBtnClick: function(){
+					var compAllData = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList);
+					var brandAllData = gagaAgGrid.selectedRowData(gridOptionsFGBrandList);
+					var applyAllData = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList);
+					var exceptAllData = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList);
+					var burdenAllData = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList);
+					var sectionGbAllData = gagaAgGrid.selectedRowData(gridOptionsSectionGbList);
+
+					var jsonSupplyCompData = JSON.stringify(compAllData);
+					$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
+					var jsonBrandData = JSON.stringify(brandAllData);
+					$('#moreBetterForm input[name=brandList]').val(jsonBrandData);
+					var jsonApplyData = JSON.stringify(applyAllData);
+					$('#moreBetterForm input[name=applyGoodsList]').val(jsonApplyData);
+					var jsonExceptData = JSON.stringify(exceptAllData);
+					$('#moreBetterForm input[name=exceptGoodsList]').val(jsonExceptData);
+					var jsonSectionGbData = JSON.stringify(sectionGbAllData);
+					$('#moreBetterForm input[name=sectionGbList]').val(jsonSectionGbData);
+					var jsonBurdenData = JSON.stringify(burdenAllData);
+					$('#moreBetterForm input[name=burdenList]').val(jsonBurdenData);
+
+					var jsonData = JSON.stringify($('#moreBetterForm').serializeObject());
+					gagajf.ajaxJsonSubmit($('#moreBetterForm').prop('action'), jsonData, function() {
+						//$('#btnSearch').trigger('click');
+						//$('#btnNew').trigger('click');
+						console.log('update 11111');
+					});
+				}
+			});
+		});
+
 		// 저장 버튼 클릭시
 		$('#btnMorebetterSave').on('click', function() {
 			// 각 ag-grid list 수량
-			let supplyCompCnt = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList).length;
-			let brandCnt = gagaAgGrid.getAllRowData(gridOptionsFGBrandList).length;
-			let applyGoodsCnt = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList).length;
-			let exceptGoodsCnt = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList).length;
-			let applyBurdenCnt = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList).length;
-			let sectionGbCnt = gagaAgGrid.getAllRowData(gridOptionsSectionGbList).length;
+			let supplyCompCnt = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList).length;
+			let brandCnt = gagaAgGrid.selectedRowData(gridOptionsFGBrandList).length;
+			let applyGoodsCnt = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList).length;
+			let exceptGoodsCnt = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList).length;
+			let applyBurdenCnt = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList).length;
+			let sectionGbCnt = gagaAgGrid.selectedRowData(gridOptionsSectionGbList).length;
 			console.log('supplyCompCnt>>'+supplyCompCnt);
 			console.log('brandCnt>>'+brandCnt);
 			console.log('applyGoodsCnt>>'+applyGoodsCnt);
 			console.log('exceptGoodsCnt>>'+exceptGoodsCnt);
 			console.log('applyBurdenCnt>>'+applyBurdenCnt);
 			console.log('sectionGbCnt>>'+sectionGbCnt);
+			if(applyGoodsCnt < 1){
+				mcxDialog.alert("선택된 적용상품이 없습니다.");
+				return false;
+			}
+			if(sectionGbCnt < 1){
+				mcxDialog.alert("선택된 할인구간이 없습니다.");
+				return false;
+			}
 
 			// 행사기간 확인
 			let fromDate = $('#moreBetterForm input[name=tmtbStdt]').val();
@@ -458,45 +569,18 @@
 
 			// disabled 값 넘겨주기
 			$('#moreBetterForm input[name=tmtbSq]').val($('#moreBetterForm input[name=disTmtbSq]').val());
-			$('#moreBetterForm input[name=tmtbStat]').val($('#moreBetterForm input[name=disTmtbStat]').val());
+			$('#moreBetterForm input[name=tmtbStat]').val($('input:radio[name="disTmtbStat"]:checked').val());
 
-
-			mcxDialog.confirm('저장하시겠습니까?', {
+			mcxDialog.confirm('선택된 데이터를 저장하시겠습니까?', {
 				cancelBtnText: "취소",
 				sureBtnText: "확인",
 				sureBtnClick: function(){
-					var comp_idx = 0;
-					var brand_idx = 0;
-					var apply_idx = 0;
-					var except_idx = 0;
-					var burden_idx = 0;
-
-					var compAllData = gagaAgGrid.getAllRowData(gridOptionsFGCompanyList);
-					/*$.each(compAllData, function(comp_idx, item) {
-						item.dispOrd = comp_idx+1;
-					});*/
-
-					var brandAllData = gagaAgGrid.getAllRowData(gridOptionsFGBrandList);
-					/*$.each(brandAllData, function(brand_idx, item) {
-						item.dispOrd = brand_idx+1;
-					});*/
-
-					var applyAllData = gagaAgGrid.getAllRowData(gridOptionsFGApplyGoodsList);
-					/*$.each(applyAllData, function(apply_idx, item) {
-						item.dispOrd = apply_idx+1;
-					});*/
-
-					var exceptAllData = gagaAgGrid.getAllRowData(gridOptionsFGExceptGoodsList);
-					/*$.each(exceptAllData, function(except_idx, item) {
-						item.dispOrd = except_idx+1;
-					});*/
-
-					var burdenAllData = gagaAgGrid.getAllRowData(gridOptionsApplyBurdenList);
-					/*$.each(burdenAllData, function(burden_idx, item) {
-						item.dispOrd = burden_idx+1;
-					});*/
-
-					var sectionGbAllData = gagaAgGrid.getAllRowData(gridOptionsSectionGbList);
+					var compAllData = gagaAgGrid.selectedRowData(gridOptionsFGCompanyList);
+					var brandAllData = gagaAgGrid.selectedRowData(gridOptionsFGBrandList);
+					var applyAllData = gagaAgGrid.selectedRowData(gridOptionsFGApplyGoodsList);
+					var exceptAllData = gagaAgGrid.selectedRowData(gridOptionsFGExceptGoodsList);
+					var burdenAllData = gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList);
+					var sectionGbAllData = gagaAgGrid.selectedRowData(gridOptionsSectionGbList);
 
 					var jsonSupplyCompData = JSON.stringify(compAllData);
 					$('#moreBetterForm input[name=supplyCompList]').val(jsonSupplyCompData);
@@ -639,6 +723,7 @@
 			cfnOpenCompanyListPopup("fnSetPopupApplyBurdenInfo");
 		});
 
+		/*
 		// 공급업체 설정 선택삭제 버튼 클릭시
 		$('#moreBetterForm #btnDeleteCompany').on('click', function() {
 			gridOptionsFGCompanyList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsFGCompanyList)});
@@ -659,7 +744,7 @@
 		$('#moreBetterForm #btnDelApplyBurden').on('click', function() {
 			gridOptionsApplyBurdenList.api.updateRowData({remove:gagaAgGrid.selectedRowData(gridOptionsApplyBurdenList)});
 		});
-
+		*/
 		//패널영역 줄이기
 		$(document).on("click",".panelControl .inner-fa-chevron-up", function() {
 			$(this).parent().parent().parent().find(".inner-panelContent").slideUp(100);
@@ -676,7 +761,7 @@
 			uifnPopupClose('popupMorebetterReg');
 		}
 
-		// 행추가
+		// 구간할인 행추가
 		$('#btnAddSectionRow').on('click', function() {
 			var tmtbSq = $('#moreBetterForm input[name=disTmtbSq]').val();
 			var sectionGbValue = $('input:radio[name="sectionGb"]:checked').val();
@@ -686,30 +771,34 @@
 			gagaAgGrid.addRowData(gridOptionsSectionGbList, data, "sectionVal");
 		});
 
-		// 행삭제
+		// 구간할인 행삭제
 		$('#btnDelSectionRow').on('click', function() {
 			var selectedData = gridOptionsSectionGbList.api.getSelectedRows();
-			var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList);
-
 			if (selectedData.length == 0) {
 				mcxDialog.alert('선택된 행이 없습니다.');
 				return;
 			}
 
+			var removedData = gagaAgGrid.removeRowData(gridOptionsSectionGbList, false);
+
+			var arrSecionSq = [];
+
+			$.each(selectedData, function(idx, item) {
+				arrSecionSq.push(item.tmtbSectionSq);
+			});
+
 			if (removedData.length > 0) {
 
 				mcxDialog.confirm('삭제하시겠습니까?', {
 					cancelBtnText: "취소",
 					sureBtnText: "확인",
 					sureBtnClick: function(){
-						var deleteData = [];
-
-						$.each(removedData, function(idx, item) {
-							deleteData.push(item);
-						});
+						var data = { arrSecionSq : arrSecionSq
+									,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						};
 
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('/morebetter/sectionVal/delete', jsonData, fnSearch);
+						var jsonData = JSON.stringify(data);
+						gagajf.ajaxJsonSubmit('/marketing/morebetter/sectionVal/delete', jsonData);
 					}
 				});
 			}
@@ -755,6 +844,141 @@
 			gridOptionsSectionGbList.api.setRowData(loopRowData);
 		});
 
+		// 공급업체 행삭제
+		$('#btnDeleteCompany').on('click', function() {
+			var selectedData = gridOptionsFGCompanyList.api.getSelectedRows();
+			if (selectedData.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			var removedData = gagaAgGrid.removeRowData(gridOptionsFGCompanyList, false);
+			var arrCompanySq = [];
+			$.each(selectedData, function(idx, item) {
+				arrCompanySq.push(item.tmtbGoodsSq);
+			});
+			if (removedData.length > 0) {
+				mcxDialog.confirm('삭제하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						var data = { arrCompanySq : arrCompanySq
+							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						};
+						var jsonData = JSON.stringify(data);
+						gagajf.ajaxJsonSubmit('/marketing/morebetter/supplyCompany/delete', jsonData);
+					}
+				});
+			}
+		});
+
+		// 브랜드 행삭제
+		$('#btnDeleteBrand').on('click', function() {
+			var selectedData = gridOptionsFGBrandList.api.getSelectedRows();
+			if (selectedData.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			var removedData = gagaAgGrid.removeRowData(gridOptionsFGBrandList, false);
+			var arrBrandSq = [];
+			$.each(selectedData, function(idx, item) {
+				arrBrandSq.push(item.tmtbGoodsSq);
+			});
+			if (removedData.length > 0) {
+				mcxDialog.confirm('삭제하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						var data = { arrBrandSq : arrBrandSq
+							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						};
+						var jsonData = JSON.stringify(data);
+						gagajf.ajaxJsonSubmit('/marketing/morebetter/brand/delete', jsonData);
+					}
+				});
+			}
+		});
+
+		// 적용상품 행삭제
+		$('#btnDeleteApplyGoods').on('click', function() {
+			var selectedData = gridOptionsFGApplyGoodsList.api.getSelectedRows();
+			if (selectedData.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			var removedData = gagaAgGrid.removeRowData(gridOptionsFGApplyGoodsList, false);
+			var arrApplyGoodsSq = [];
+			$.each(selectedData, function(idx, item) {
+				arrApplyGoodsSq.push(item.tmtbGoodsSq);
+			});
+			if (removedData.length > 0) {
+				mcxDialog.confirm('삭제하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						var data = { arrApplyGoodsSq : arrApplyGoodsSq
+							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						};
+						var jsonData = JSON.stringify(data);
+						gagajf.ajaxJsonSubmit('/marketing/morebetter/applyGoods/delete', jsonData);
+					}
+				});
+			}
+		});
+
+		// 제외상품 행삭제
+		$('#btnDeleteExtGoods').on('click', function() {
+			var selectedData = gridOptionsFGExceptGoodsList.api.getSelectedRows();
+			if (selectedData.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			var removedData = gagaAgGrid.removeRowData(gridOptionsFGExceptGoodsList, false);
+			var arrExceptGoodsSq = [];
+			$.each(selectedData, function(idx, item) {
+				arrExceptGoodsSq.push(item.tmtbGoodsSq);
+			});
+			if (removedData.length > 0) {
+				mcxDialog.confirm('삭제하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						var data = { arrExceptGoodsSq : arrExceptGoodsSq
+							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						};
+						var jsonData = JSON.stringify(data);
+						gagajf.ajaxJsonSubmit('/marketing/morebetter/exceptGoods/delete', jsonData);
+					}
+				});
+			}
+		});
+
+		// 업체분담율 행삭제
+		$('#btnDelApplyBurden').on('click', function() {
+			var selectedData = gridOptionsApplyBurdenList.api.getSelectedRows();
+			if (selectedData.length == 0) {
+				mcxDialog.alert('선택된 행이 없습니다.');
+				return;
+			}
+			var removedData = gagaAgGrid.removeRowData(gridOptionsApplyBurdenList, false);
+			var arrBurdenSq = [];
+			$.each(selectedData, function(idx, item) {
+				arrBurdenSq.push(item.tmtbBurdenSq);
+			});
+			if (removedData.length > 0) {
+				mcxDialog.confirm('삭제하시겠습니까?', {
+					cancelBtnText: "취소",
+					sureBtnText: "확인",
+					sureBtnClick: function(){
+						var data = { arrBurdenSq : arrBurdenSq
+							,tmtbSq : $('#moreBetterForm input[name=disTmtbSq]').val()
+						};
+						var jsonData = JSON.stringify(data);
+						gagajf.ajaxJsonSubmit('/marketing/morebetter/burden/delete', jsonData);
+					}
+				});
+			}
+		});
+
 		$(document).ready(function() {
 
 		});

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

@@ -729,12 +729,13 @@ var cfnOpenCompanyListPopup = function(callbackfn) {
  * <pre>
  *     cfnOpenTmtbSetPopup();
  * </pre>
+ * @param  : mode - 모드(N:신규, U:상세/수정, C:복사) 필수
  * @since  : 2020/12/29
  * @author : bin2107
  */
-var cfnOpenMorebetterSetPopup = function() {
-	var actionUrl = "/marketing/morebetterRegPopup/form?gbn=C";
-
+var cfnOpenMorebetterSetPopup = function(mode ,tmtbSeq) {
+	var actionUrl = "/marketing/morebetterRegPopup/form?mode="+mode;
+	if (typeof(tmtbSeq) != 'undefined') actionUrl += "&tmtbSeq=" + tmtbSeq;
 	uifnPopupClose('popupMorebetterReg');
 	cfnOpenModalPopup(actionUrl, 'popupMorebetterReg');
 }