Просмотр исходного кода

기획전 템플릿 수정 중간커밋

sowon4187 5 лет назад
Родитель
Сommit
f9bffd7aed

+ 83 - 0
src/main/java/com/style24/admin/biz/dao/TsaPlanDao.java

@@ -6,6 +6,7 @@ import org.springframework.stereotype.Repository;
 
 import com.style24.core.support.annotation.ShopDs;
 import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.Plan;
 
 /**
@@ -343,5 +344,87 @@ public interface TsaPlanDao {
 	 * @since 2021. 2. 25
 	 */
 	void createPlanContentsItem(Plan param);
+	
+	/**
+	 * 기획전 템플릿 조회
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentList(Plan param);
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 리뷰
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentReviewList(Plan param);
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 쿠폰
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentCouponList(Plan param);
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 파일
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentFileList(Plan param);
+	
+	/**
+	 * 기획전 템플릿 상세조회 - html
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentFsrcList(Plan param);
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 상품
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentGoodsList(Plan param);
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 상품 목록조회
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	Collection<Plan> getPlanContentGoodsDetailList(Plan param);
+	
+	
+	/**
+	 * 기획전템플릿 아이템 삭제
+	 * @param 
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	void deletePlanContentItem(Integer planContSq);
+	
+	/**
+	 * 기획전템플릿 이미지파일 삭제
+	 * @param 
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	void deletePlanTemplateFile(Plan plan);
+	
+
 
 }

+ 513 - 103
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -3,6 +3,7 @@ package com.style24.admin.biz.service;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Iterator;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,10 +17,7 @@ import com.gagaframework.web.util.GagaFileUtil;
 import com.gagaframework.web.util.GagaStringUtil;
 import com.style24.admin.biz.dao.TsaPlanDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.MktmailManagement;
-import com.style24.persistence.domain.MktmailManagementGoods;
-import com.style24.persistence.domain.MktmailManagementTc;
+import com.style24.persistence.domain.Notice;
 import com.style24.persistence.domain.Plan;
 
 import lombok.extern.slf4j.Slf4j;
@@ -706,136 +704,548 @@ public class TsaPlanService {
 		
 		param.setRegNo(regNo);
 		
-		if (param.getMode().equals("C")) {
-			// 리뷰 등록
-			Plan rePlan = new Plan();
-			//리뷰 등록 - tb_plan_contents
-			if(param.getReTitle() != "" || param.getMultiPlanReview().length>0) {
-				rePlan.setRegNo(regNo);
-				rePlan.setUpdNo(regNo);
-				rePlan.setTmplType("G082_10");
-				rePlan.setPlanSq(param.getPlanSq());
-				rePlan.setTitle(param.getReTitle());
-				rePlan.setDispYn(param.getReDispYn());
-				rePlan.setDispOrd(param.getReDispOrd());
-				planDao.createPlanContents(rePlan);
-
-				//리뷰 아이템 등록
-				if(param.getMultiPlanReview().length>0) {
-					String[] reItemVal = param.getMultiPlanReview();
-					String[] startDate = param.getMultiPlanReviewStartD();
-					String[] startTime = param.getMultiPlanReviewStartT();
-					String[] endDate = param.getMultiPlanReviewEndD();
-					String[] endTime = param.getMultiPlanReviewEndT();
-					// 기획전 브랜드 insert
-					for (int j = 0; j < reItemVal.length; j++) {
-						rePlan.setItemVal(reItemVal[j]);
-						rePlan.setReviewDispStdt(startDate[j] + ' ' +startTime[j]);
-						rePlan.setReviewDispEddt(endDate[j] + ' ' +endTime[j]);
-						planDao.createPlanContentsItem(rePlan);
-					}
+		// 리뷰 등록
+		Plan rePlan = new Plan();
+		//리뷰 등록 - tb_plan_contents
+		if(param.getReTitle() != "" || param.getMultiPlanReview().length>0) {
+			rePlan.setRegNo(regNo);
+			rePlan.setUpdNo(regNo);
+			rePlan.setTmplType("G082_10");
+			rePlan.setPlanSq(param.getPlanSq());
+			rePlan.setTitle(param.getReTitle());
+			rePlan.setDispYn(param.getReDispYn());
+			rePlan.setDispOrd(param.getReDispOrd());
+			rePlan.setPlanContSq(param.getRePlanContSq());
+			planDao.createPlanContents(rePlan);
+
+			// 기존 리뷰아이템 삭제
+			planDao.deletePlanContentItem(param.getRePlanContSq());
+			//리뷰 아이템 등록
+			if(param.getMultiPlanReview().length>0) {
+				String[] reItemVal = param.getMultiPlanReview();
+				String[] startDate = param.getMultiPlanReviewStartD();
+				String[] startTime = param.getMultiPlanReviewStartT();
+				String[] endDate = param.getMultiPlanReviewEndD();
+				String[] endTime = param.getMultiPlanReviewEndT();
+				// 기획전 브랜드 insert
+				for (int j = 0; j < reItemVal.length; j++) {
+					rePlan.setItemVal(reItemVal[j]);
+					rePlan.setReviewDispStdt(startDate[j] + ' ' +startTime[j]);
+					rePlan.setReviewDispEddt(endDate[j] + ' ' +endTime[j]);
+					planDao.createPlanContentsItem(rePlan);
 				}
 			}
+		}
+		
+		// 쿠폰등록
+		Plan cuPlan = new Plan();
+		//쿠폰 등록 - tb_plan_contents
+		if(param.getCuTitle() != "" || param.getMultiPlanCoupon().length>0) {
+			cuPlan.setRegNo(regNo);
+			cuPlan.setUpdNo(regNo);
+			cuPlan.setTmplType("G082_20");
+			cuPlan.setPlanSq(param.getPlanSq());
+			cuPlan.setTitle(param.getCuTitle());
+			cuPlan.setDispYn(param.getCuDispYn());
+			cuPlan.setDispOrd(param.getCuDispOrd());
+			cuPlan.setPlanContSq(param.getCuPlanContSq());
+			planDao.createPlanContents(cuPlan);
 			
-			// 쿠폰등록
-			Plan cuPlan = new Plan();
-			//쿠폰 등록 - tb_plan_contents
-			if(param.getCuTitle() != "" || param.getMultiPlanCoupon().length>0) {
-				cuPlan.setRegNo(regNo);
-				cuPlan.setUpdNo(regNo);
-				cuPlan.setTmplType("G082_20");
-				cuPlan.setPlanSq(param.getPlanSq());
-				cuPlan.setTitle(param.getCuTitle());
-				cuPlan.setDispYn(param.getCuDispYn());
-				cuPlan.setDispOrd(param.getCuDispOrd());
-				planDao.createPlanContents(cuPlan);
+			// 기존 쿠폰아이템 삭제
+			planDao.deletePlanContentItem(param.getCuPlanContSq());
+						
+			//쿠폰아이템 등록
+			if(param.getMultiPlanCoupon().length>0) {
+				String[] cuItemVal = param.getMultiPlanCoupon();
 				
-				//쿠폰아이템 등록
-				if(param.getMultiPlanCoupon().length>0) {
-					String[] cuItemVal = param.getMultiPlanCoupon();
+				// 기획전 브랜드 insert
+				for (int j = 0; j < cuItemVal.length; j++) {
+					cuPlan.setItemVal(cuItemVal[j]);
+					planDao.createPlanContentsItem(cuPlan);
+				}
+			}
+		}
+		
+		//이미지등록
+		Plan filePlan = new Plan();
+		if(param.getMultiPlanFile().length>=0) {
+			filePlan.setRegNo(regNo);
+			filePlan.setUpdNo(regNo);
+			filePlan.setTmplType("G082_30");
+			filePlan.setPlanSq(param.getPlanSq());
+			filePlan.setDispYn(param.getFileDispYn());
+			filePlan.setDispOrd(param.getFileDispOrd());
+			filePlan.setPlanContSq(param.getFilePlanContSq());
+			
+			planDao.createPlanContents(filePlan);
+			
+			// 기존  파일 삭제
+			/* planDao.deletePlanContentItem(param.getFilePlanContSq()); */
+			
+			//파일아이템 등록
+			if(param.getMultiPlanFile().length>0) {
+				String[] fileItemVal = param.getMultiPlanFile();
+				
+				// 기획전 브랜드 insert
+				for (int j = 0; j < fileItemVal.length; j++) {
+					filePlan.setItemVal(fileItemVal[j]);
+					planDao.createPlanContentsItem(filePlan);
+				}
+			}
+		}
+		
+		//HTML[상단] 등록
+		Plan fsrcTop = new Plan();
+		if(param.getFsrcMobileTop() != "" || param.getFsrcPcTop() != "") {
+			//tb_plan_contents 등록
+			fsrcTop.setRegNo(regNo);
+			fsrcTop.setUpdNo(regNo);
+			fsrcTop.setTmplType("G082_40");
+			fsrcTop.setPlanSq(param.getPlanSq());
+			fsrcTop.setDispYn(param.getTopFsrcDispYn());
+			fsrcTop.setDispOrd(param.getTopFsrcDispOrd());
+			
+			planDao.createPlanContents(fsrcTop);
+			
+			// 웹용 상단PC 등록
+			if (StringUtils.isNotBlank(param.getFsrcPcTop())) {
+				createPlanFsrcPcTop(param);
+			}
+			// 웹용 상단MOBILE 등록
+			if (StringUtils.isNotBlank(param.getFsrcMobileTop())) {
+				createPlanFsrcMobileTop(param);
+			}
+		}
+		
+		//HTML[하단] 등록
+		Plan fsrcBtm = new Plan();
+		if(param.getFsrcMobileBtm() != "" || param.getFsrcPcBtm() != "") {
+			//tb_plan_contents 등록
+			fsrcBtm.setRegNo(regNo);
+			fsrcBtm.setUpdNo(regNo);
+			fsrcBtm.setTmplType("G082_41");
+			fsrcBtm.setPlanSq(param.getPlanSq());
+			fsrcBtm.setDispYn(param.getBtmFsrcDispYn());
+			fsrcBtm.setDispOrd(param.getBtmFsrcDispOrd());
+			
+			planDao.createPlanContents(fsrcBtm);
+			
+			// 웹용 상단PC 등록
+			if (StringUtils.isNotBlank(param.getFsrcPcBtm())) {
+				createPlanFsrcPcBtm(param);
+			}
+			// 웹용 상단MOBILE 등록
+			if (StringUtils.isNotBlank(param.getFsrcMobileBtm())) {
+				createPlanFsrcMobileBtm(param);
+			}
+		}
+		
+		//상품 등록 -- 1
+		for (Plan multiPlanGoodsContent1 : param.getMultiPlanGoodsContent1()) {
+			
+			if (!StringUtils.isEmpty(multiPlanGoodsContent1.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent1.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent1.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent1.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent1.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent1.getGoodsDispYn();
+				
+				Plan goods1 = new Plan();
+				goods1.setRegNo(regNo);
+				goods1.setUpdNo(regNo);
+				goods1.setTitle(goodsTitle);
+				goods1.setDispOrd(goodsDispOrd);
+				goods1.setPlanSq(param.getPlanSq());
+				goods1.setDispYn(goodsDispYn);
+				goods1.setTmplType(goodsType);
+				goods1.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods1);
+				
+				for (Plan multiPlanGoodsContentVal1 : param.getMultiPlanGoodsContentVal1()) {
+					if(param.getMultiPlanGoodsContentVal1().size()>0) {
+						goods1.setItemVal(multiPlanGoodsContentVal1.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods1);
+					}
 					
-					// 기획전 브랜드 insert
-					for (int j = 0; j < cuItemVal.length; j++) {
-						cuPlan.setItemVal(cuItemVal[j]);
-						planDao.createPlanContentsItem(cuPlan);
+				}
+			}
+		}
+		
+		//상품 등록 -- 2
+		for (Plan multiPlanGoodsContent2 : param.getMultiPlanGoodsContent2()) {
+			
+			if (!StringUtils.isEmpty(multiPlanGoodsContent2.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent2.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent2.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent2.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent2.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent2.getGoodsDispYn();
+				
+				Plan goods2 = new Plan();
+				goods2.setRegNo(regNo);
+				goods2.setUpdNo(regNo);
+				goods2.setTitle(goodsTitle);
+				goods2.setDispOrd(goodsDispOrd);
+				goods2.setPlanSq(param.getPlanSq());
+				goods2.setDispYn(goodsDispYn);
+				goods2.setTmplType(goodsType);
+				goods2.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods2);
+				
+				for (Plan multiPlanGoodsContentVal2 : param.getMultiPlanGoodsContentVal2()) {
+					if(param.getMultiPlanGoodsContentVal2().size()>0) {
+						goods2.setItemVal(multiPlanGoodsContentVal2.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods2);
 					}
+					
 				}
 			}
+		}
+		
+		//상품 등록 -- 3
+		for (Plan multiPlanGoodsContent3 : param.getMultiPlanGoodsContent3()) {
 			
-			//이미지등록
-			Plan filePlan = new Plan();
-			if(param.getMultiPlanFile().length>0) {
-				filePlan.setRegNo(regNo);
-				filePlan.setUpdNo(regNo);
-				filePlan.setTmplType("G082_30");
-				filePlan.setPlanSq(param.getPlanSq());
-				filePlan.setDispYn(param.getFileDispYn());
-				filePlan.setDispOrd(param.getFileDispOrd());
-				planDao.createPlanContents(filePlan);
+			if (!StringUtils.isEmpty(multiPlanGoodsContent3.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent3.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent3.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent3.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent3.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent3.getGoodsDispYn();
+				
+				Plan goods3 = new Plan();
+				goods3.setRegNo(regNo);
+				goods3.setUpdNo(regNo);
+				goods3.setTitle(goodsTitle);
+				goods3.setDispOrd(goodsDispOrd);
+				goods3.setPlanSq(param.getPlanSq());
+				goods3.setDispYn(goodsDispYn);
+				goods3.setTmplType(goodsType);
+				goods3.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods3);
 				
-				//파일아이템 등록
-				if(param.getMultiPlanFile().length>0) {
-					String[] fileItemVal = param.getMultiPlanFile();
+				for (Plan multiPlanGoodsContentVal3 : param.getMultiPlanGoodsContentVal3()) {
+					if(param.getMultiPlanGoodsContentVal3().size()>0) {
+						goods3.setItemVal(multiPlanGoodsContentVal3.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods3);
+					}
 					
-					// 기획전 브랜드 insert
-					for (int j = 0; j < fileItemVal.length; j++) {
-						filePlan.setItemVal(fileItemVal[j]);
-						planDao.createPlanContentsItem(filePlan);
+				}
+			}
+		}
+		
+		//상품 등록 -- 4
+		for (Plan multiPlanGoodsContent4 : param.getMultiPlanGoodsContent4()) {
+			
+			if (!StringUtils.isEmpty(multiPlanGoodsContent4.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent4.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent4.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent4.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent4.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent4.getGoodsDispYn();
+				
+				Plan goods4 = new Plan();
+				goods4.setRegNo(regNo);
+				goods4.setUpdNo(regNo);
+				goods4.setTitle(goodsTitle);
+				goods4.setDispOrd(goodsDispOrd);
+				goods4.setPlanSq(param.getPlanSq());
+				goods4.setDispYn(goodsDispYn);
+				goods4.setTmplType(goodsType);
+				goods4.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods4);
+				
+				for (Plan multiPlanGoodsContentVal4 : param.getMultiPlanGoodsContentVal4()) {
+					if(param.getMultiPlanGoodsContentVal4().size()>0) {
+						goods4.setItemVal(multiPlanGoodsContentVal4.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods4);
 					}
+					
 				}
 			}
+		}
+		
+		//상품 등록 -- 5
+		for (Plan multiPlanGoodsContent5 : param.getMultiPlanGoodsContent5()) {
 			
-			//HTML[상단] 등록
-			Plan fsrcTop = new Plan();
-			if(param.getFsrcMobileTop() != "" || param.getFsrcPcTop() != "") {
-				//tb_plan_contents 등록
-				fsrcTop.setRegNo(regNo);
-				fsrcTop.setUpdNo(regNo);
-				fsrcTop.setTmplType("G082_40");
-				fsrcTop.setPlanSq(param.getPlanSq());
-				fsrcTop.setDispYn(param.getTopFsrcDispYn());
-				fsrcTop.setDispOrd(param.getTopFsrcDispOrd());
+			if (!StringUtils.isEmpty(multiPlanGoodsContent5.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent5.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent5.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent5.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent5.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent5.getGoodsDispYn();
 				
-				planDao.createPlanContents(fsrcTop);
+				Plan goods5 = new Plan();
+				goods5.setRegNo(regNo);
+				goods5.setUpdNo(regNo);
+				goods5.setTitle(goodsTitle);
+				goods5.setDispOrd(goodsDispOrd);
+				goods5.setPlanSq(param.getPlanSq());
+				goods5.setDispYn(goodsDispYn);
+				goods5.setTmplType(goodsType);
+				goods5.setLinkUrl(goodsUrl);
 				
-				// 웹용 상단PC 등록
-				if (StringUtils.isNotBlank(param.getFsrcPcTop())) {
-					createPlanFsrcPcTop(param);
+				planDao.createPlanContents(goods5);
+				
+				for (Plan multiPlanGoodsContentVal5 : param.getMultiPlanGoodsContentVal5()) {
+					if(param.getMultiPlanGoodsContentVal5().size()>0) {
+						goods5.setItemVal(multiPlanGoodsContentVal5.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods5);
+					}
+					
 				}
-				// 웹용 상단MOBILE 등록
-				if (StringUtils.isNotBlank(param.getFsrcMobileTop())) {
-					createPlanFsrcMobileTop(param);
+			}
+		}
+		
+		//상품 등록 -- 6
+		for (Plan multiPlanGoodsContent6 : param.getMultiPlanGoodsContent6()) {
+			
+			if (!StringUtils.isEmpty(multiPlanGoodsContent6.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent6.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent6.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent6.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent6.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent6.getGoodsDispYn();
+				
+				Plan goods6 = new Plan();
+				goods6.setRegNo(regNo);
+				goods6.setUpdNo(regNo);
+				goods6.setTitle(goodsTitle);
+				goods6.setDispOrd(goodsDispOrd);
+				goods6.setPlanSq(param.getPlanSq());
+				goods6.setDispYn(goodsDispYn);
+				goods6.setTmplType(goodsType);
+				goods6.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods6);
+				
+				for (Plan multiPlanGoodsContentVal6 : param.getMultiPlanGoodsContentVal6()) {
+					if(param.getMultiPlanGoodsContentVal6().size()>0) {
+						goods6.setItemVal(multiPlanGoodsContentVal6.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods6);
+					}
+					
 				}
 			}
+		}
+		
+		//상품 등록 -- 7
+		for (Plan multiPlanGoodsContent7 : param.getMultiPlanGoodsContent7()) {
 			
-			//HTML[하단] 등록
-			Plan fsrcBtm = new Plan();
-			if(param.getFsrcMobileBtm() != "" || param.getFsrcPcBtm() != "") {
-				//tb_plan_contents 등록
-				fsrcBtm.setRegNo(regNo);
-				fsrcBtm.setUpdNo(regNo);
-				fsrcBtm.setTmplType("G082_41");
-				fsrcBtm.setPlanSq(param.getPlanSq());
-				fsrcBtm.setDispYn(param.getBtmFsrcDispYn());
-				fsrcBtm.setDispOrd(param.getBtmFsrcDispOrd());
+			if (!StringUtils.isEmpty(multiPlanGoodsContent7.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent7.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent7.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent7.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent7.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent7.getGoodsDispYn();
+				
+				Plan goods7 = new Plan();
+				goods7.setRegNo(regNo);
+				goods7.setUpdNo(regNo);
+				goods7.setTitle(goodsTitle);
+				goods7.setDispOrd(goodsDispOrd);
+				goods7.setPlanSq(param.getPlanSq());
+				goods7.setDispYn(goodsDispYn);
+				goods7.setTmplType(goodsType);
+				goods7.setLinkUrl(goodsUrl);
 				
-				planDao.createPlanContents(fsrcBtm);
+				planDao.createPlanContents(goods7);
 				
-				// 웹용 상단PC 등록
-				if (StringUtils.isNotBlank(param.getFsrcPcBtm())) {
-					createPlanFsrcPcBtm(param);
+				for (Plan multiPlanGoodsContentVal7 : param.getMultiPlanGoodsContentVal7()) {
+					if(param.getMultiPlanGoodsContentVal7().size()>0) {
+						goods7.setItemVal(multiPlanGoodsContentVal7.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods7);
+					}
+					
 				}
-				// 웹용 상단MOBILE 등록
-				if (StringUtils.isNotBlank(param.getFsrcMobileBtm())) {
-					createPlanFsrcMobileBtm(param);
+			}
+		}
+		
+		//상품 등록 -- 8
+		for (Plan multiPlanGoodsContent8 : param.getMultiPlanGoodsContent8()) {
+			
+			if (!StringUtils.isEmpty(multiPlanGoodsContent8.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent8.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent8.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent8.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent8.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent8.getGoodsDispYn();
+				
+				Plan goods8 = new Plan();
+				goods8.setRegNo(regNo);
+				goods8.setUpdNo(regNo);
+				goods8.setTitle(goodsTitle);
+				goods8.setDispOrd(goodsDispOrd);
+				goods8.setPlanSq(param.getPlanSq());
+				goods8.setDispYn(goodsDispYn);
+				goods8.setTmplType(goodsType);
+				goods8.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods8);
+				
+				for (Plan multiPlanGoodsContentVal8 : param.getMultiPlanGoodsContentVal8()) {
+					if(param.getMultiPlanGoodsContentVal8().size()>0) {
+						goods8.setItemVal(multiPlanGoodsContentVal8.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods8);
+					}
+					
 				}
 			}
+		}
+		
+		//상품 등록 -- 9
+		for (Plan multiPlanGoodsContent9 : param.getMultiPlanGoodsContent9()) {
 			
-			//상품 등록
+			if (!StringUtils.isEmpty(multiPlanGoodsContent9.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent9.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent9.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent9.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent9.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent9.getGoodsDispYn();
+				
+				Plan goods9 = new Plan();
+				goods9.setRegNo(regNo);
+				goods9.setUpdNo(regNo);
+				goods9.setTitle(goodsTitle);
+				goods9.setDispOrd(goodsDispOrd);
+				goods9.setPlanSq(param.getPlanSq());
+				goods9.setDispYn(goodsDispYn);
+				goods9.setTmplType(goodsType);
+				goods9.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods9);
+				
+				for (Plan multiPlanGoodsContentVal9 : param.getMultiPlanGoodsContentVal9()) {
+					if(param.getMultiPlanGoodsContentVal9().size()>0) {
+						goods9.setItemVal(multiPlanGoodsContentVal9.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods9);
+					}
+					
+				}
+			}
+		}
 		
+		//상품 등록 -- 10
+		for (Plan multiPlanGoodsContent10 : param.getMultiPlanGoodsContent10()) {
+			
+			if (!StringUtils.isEmpty(multiPlanGoodsContent10.getGoodsType())) {
+				String goodsTitle = multiPlanGoodsContent10.getGoodsTitle();
+				String goodsUrl = multiPlanGoodsContent10.getGoodsUrl();
+				String goodsType = multiPlanGoodsContent10.getGoodsType();
+				long goodsDispOrd = multiPlanGoodsContent10.getGoodsDispOrd();
+				String goodsDispYn = multiPlanGoodsContent10.getGoodsDispYn();
+				
+				Plan goods10 = new Plan();
+				goods10.setRegNo(regNo);
+				goods10.setUpdNo(regNo);
+				goods10.setTitle(goodsTitle);
+				goods10.setDispOrd(goodsDispOrd);
+				goods10.setPlanSq(param.getPlanSq());
+				goods10.setDispYn(goodsDispYn);
+				goods10.setTmplType(goodsType);
+				goods10.setLinkUrl(goodsUrl);
+				
+				planDao.createPlanContents(goods10);
+				
+				for (Plan multiPlanGoodsContentVal10 : param.getMultiPlanGoodsContentVal10()) {
+					if(param.getMultiPlanGoodsContentVal10().size()>0) {
+						goods10.setItemVal(multiPlanGoodsContentVal10.getGoodsItemVal());
+						planDao.createPlanContentsItem(goods10);
+					}
+					
+				}
+			}
 		}
 	}
 	
+	/**
+	 * 기획전 템플릿 상세조회 - 리뷰
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3 .2
+	 */
+	public Collection<Plan> getPlanContentReviewList(Plan param){
+		return planDao.getPlanContentReviewList(param);
+	}
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 쿠폰
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3 .2
+	 */
+	public Collection<Plan> getPlanContentCouponList(Plan param){
+		return planDao.getPlanContentCouponList(param);
+	}
+	
+	
+	/**
+	 * 기획전 템플릿 상세조회 - 파일
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3 .2
+	 */
+	public Collection<Plan> getPlanContentFileList(Plan param){
+		return planDao.getPlanContentFileList(param);
+	}
+	
+	/**
+	 * 기획전 템플릿 상세조회 - html
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3 .2
+	 */
+	public Collection<Plan> getPlanContentFsrcList(Plan param){
+		return planDao.getPlanContentFsrcList(param);
+	}
+	
+	/**
+	 * 기획전 템플릿 상세조회 - goods
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3 .2
+	 */
+	public Collection<Plan> getPlanContentGoodsList(Plan param){
+		return planDao.getPlanContentGoodsList(param);
+	}
+	
+	/**
+	 * 기획전 템플릿 상세조회 - goods 목록조회
+	 *
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3 .2
+	 */
+	public Collection<Plan> getPlanContentGoodsDetailList(Plan param){
+		return planDao.getPlanContentGoodsDetailList(param);
+	}
+	/**
+	 * 기획전 템플릿 이미지 첨부파일 삭제
+	 * @param 
+	 * @return
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	@Transactional("shopTxnManager")
+	public void deletePlanTemplateFile(Plan plan) {
+		planDao.deletePlanTemplateFile(plan);
+	}
+	
+	
 	
 	/*
 	 * 기획전 템플릿 HTML[상단] PC 소스 등록

+ 70 - 23
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1,15 +1,18 @@
 package com.style24.admin.biz.web;
 
+import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
+import java.util.Iterator;
 
 import com.style24.core.biz.service.TscCouponService;
 import com.style24.persistence.domain.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -36,30 +39,8 @@ import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.biz.service.TscPointService;
 import com.style24.core.support.env.TscConstants;
 import com.style24.core.support.message.TscMessageByLocale;
-import com.style24.core.support.session.TscSession;
 import com.style24.persistence.TscPageRequest;
 
-import com.style24.persistence.domain.CardPromotion;
-import com.style24.persistence.domain.CardPromotionTarget;
-
-import com.style24.persistence.domain.CommonCode;
-import com.style24.persistence.domain.Coupon;
-import com.style24.persistence.domain.CouponRefval;
-import com.style24.persistence.domain.CustCoupon;
-import com.style24.persistence.domain.FreeGoodsPromotion;
-import com.style24.persistence.domain.Goods;
-import com.style24.persistence.domain.MailTemplate;
-import com.style24.persistence.domain.MktmailManagement;
-import com.style24.persistence.domain.MktmailManagementGoods;
-import com.style24.persistence.domain.MktmailManagementTc;
-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.Point;
-import com.style24.persistence.domain.Review;
-import com.style24.persistence.domain.User;
-
 import lombok.extern.slf4j.Slf4j;
 
 import com.gagaframework.excel.GagaExcelUtil;
@@ -120,6 +101,9 @@ public class TsaMarketingController extends TsaBaseController {
 
 	@Autowired
 	private TscCouponService coreCouponService;
+	
+	@Value("${upload.default.target.path}")
+	private String uploadTargetPath;
 
 
 	/**
@@ -2061,14 +2045,55 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2021. 2. 18
 	 */
 	@GetMapping("/planning/detail/template/form")
-	public ModelAndView planTemplateForm(Plan param,@RequestParam(value = "planSq") String planSq)  {
+	public ModelAndView planTemplateForm(Plan param,@RequestParam(value = "planSq") Integer planSq)  {
 		ModelAndView mav = new ModelAndView();
 		
 		// 템플릿 등록이 최조인지 확인
 		if(planService.getPlanContentsCount(param) > 0) {
 			mav.addObject("mode","U");
+			
+			//리뷰리스트
+			param.setPlanSq(planSq);
+			param.setTmplType("G082_10");
+			mav.addObject("reviewList", planService.getPlanContentReviewList(param));
+			
+			//쿠폰리스트
+			param.setTmplType("G082_20");
+			mav.addObject("couponList", planService.getPlanContentCouponList(param));
+			
+			//파일리스트
+			param.setTmplType("G082_30");
+			mav.addObject("fileList", planService.getPlanContentFileList(param));
+			
+			//html 리스트 - 상단
+			param.setTmplType("G082_40");
+			mav.addObject("fsrcListTop", planService.getPlanContentFsrcList(param));
+			
+			//html 리스트 - 하단
+			param.setTmplType("G082_41");
+			mav.addObject("fsrcListBtm", planService.getPlanContentFsrcList(param));
+			
+			//상품 리스트
+			mav.addObject("goodsList", planService.getPlanContentGoodsList(param));
+			
+			Collection<Plan> goodsList =  planService.getPlanContentGoodsList(param);
+			Iterator<Plan> iter = goodsList.iterator();
+			int i = 1;
+			while (iter.hasNext()) {
+				
+				Integer planContSq = iter.next().getPlanContSq();
+				System.out.println("planContSq:"+planContSq);
+				param.setPlanContSq(planContSq);
+				mav.addObject("goodsDetailList" + i, planService.getPlanContentGoodsDetailList(param));
+				i++;
+			}
+			
+			
 		}else {
 			mav.addObject("mode","C");
+
+			
+			
 		}
 		// 상품상태
 		String[] exceptCds = {"G008_00"};
@@ -2079,6 +2104,28 @@ public class TsaMarketingController extends TsaBaseController {
 		return mav;
 	}
 	
+	/**
+	 * 첨부파일 삭제
+	 * @param plan_content - 기획전템플릿 첨부파일
+	 * @return
+	 * @throws IOException
+	 * @author sowon
+	 * @since 2021. 3. 2
+	 */
+	@PostMapping("/planning/detail/template/file/delete")
+	@ResponseBody
+	public GagaResponse deletePlanTemplateFile(@RequestBody Plan plan) throws IOException {
+		// 파일 삭제
+		String fileName = GagaFileUtil.getConcatenationPath(uploadTargetPath, "planning", plan.getFileItemVal());
+
+		GagaFileUtil.deleteFile(fileName);
+
+		// 삭제된 파일 DB 처리
+		planService.deletePlanTemplateFile(plan);
+
+		return super.ok(message.getMessage("SUCC_0003"));
+	}
+	
 	/**
 	 * 기획전 템플릿 저장
 	 *

+ 49 - 20
src/main/java/com/style24/persistence/domain/Plan.java

@@ -192,15 +192,20 @@ public class Plan extends TscBaseDomain{
 		private long reDispOrd;				//리뷰전시순서
 		private String reItemVal;			//리뷰아이템
 		private String reDispYn;			//리뷰전시여부
+		private String reItemNm;			//리뷰상품이름
+		private Integer rePlanContSq;		//리뷰 컨텐츠일련번호
 		
 		private String cuTitle;				//쿠폰타이틀
 		private long cuDispOrd;				//쿠폰전시순서
 		private String cuDispYn;			//쿠폰전시여부
 		private String cuItemVal;			//쿠폰 아이템
+		private String cuItemNm;			//쿠폰 아이템 이름
+		private Integer cuPlanContSq;		//쿠폰 컨텐츠일련번호
 		
 		private String fileItemVal;			//파일아이템
 		private String fileDispYn;			//파일전시여부
 		private long fileDispOrd;			//파일전시순서
+		private Integer filePlanContSq;		//파일 컨텐츠일련번호
 		
 		private String topFsrcDispYn;		//html상단 전시여부
 		private String BtmFsrcDispYn;		//html하단 전시여부
@@ -215,6 +220,9 @@ public class Plan extends TscBaseDomain{
 		private String goodsUrl;			//상품 url
 		private String goodsDispYn;			//상품전시여부
 		private long goodsDispOrd;			//상품 전시순서
+		private String goodsType;			//상품노출순서
+		private String goodsItemVal;		//상품아이템
+		private String brandEnm;			//브랜드명
 		
 		// Pagination
 		private TscPageRequest pageable;
@@ -236,24 +244,45 @@ public class Plan extends TscBaseDomain{
 	    private String[] usableCustGbArr;
 	    
 	    
-		private String[] multiPlanGoodsContent1; 
-		private String[] multiPlanGoodsContent2; 
-		private String[] multiPlanGoodsContent3; 
-		private String[] multiPlanGoodsContent4; 
-		private String[] multiPlanGoodsContent5; 
-		private String[] multiPlanGoodsContent6; 
-		private String[] multiPlanGoodsContent7; 
-		private String[] multiPlanGoodsContent8; 
-		private String[] multiPlanGoodsContent9; 
-		private String[] multiPlanGoodsContent10; 
-		private String[] multiPlanGoodsContentVal1; 
-		private String[] multiPlanGoodsContentVal2; 
-		private String[] multiPlanGoodsContentVal3; 
-		private String[] multiPlanGoodsContentVal4; 
-		private String[] multiPlanGoodsContentVal5; 
-		private String[] multiPlanGoodsContentVal6; 
-		private String[] multiPlanGoodsContentVal7; 
-		private String[] multiPlanGoodsContentVal8; 
-		private String[] multiPlanGoodsContentVal9; 
-		private String[] multiPlanGoodsContentVal10; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent1; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent2; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent3; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent4; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent5; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent6; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent7; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent8; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent9; 
+	    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContent10; 
+	    
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal1; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal2; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal3; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal4; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal5; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal6; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal7; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal8; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal9; 
+		@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+		List<Plan> multiPlanGoodsContentVal10; 
 }

+ 121 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -984,6 +984,127 @@
 			   , REG_DT= now()
 	</insert>
 	
+	<select id="getPlanContentReviewList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentReviewList */
+		SELECT A.PLAN_CONT_SQ 
+			  ,A.PLAN_SQ 
+		      ,A.TMPL_TYPE 
+		      ,A.TITLE 
+		      ,A.LINK_URL 
+		      ,A.DISP_YN 
+		      ,A.DISP_ORD 
+		      ,A.REG_NO 
+		      ,B.ITEM_VAL AS reItemVal
+		      ,SUBSTRING_INDEX(B.REVIEW_DISP_STDT, ' ', 1) AS startSearchDate
+		      ,SUBSTRING_INDEX(B.REVIEW_DISP_STDT, ' ', -1) AS startSearchTime
+		      ,SUBSTRING_INDEX(B.REVIEW_DISP_EDDT , ' ', 1) AS endSearchDate
+		      ,SUBSTRING_INDEX(B.REVIEW_DISP_EDDT , ' ', -1) AS endSearchTime
+		      ,C.GOODS_NM AS reItemNm
+		FROM TB_PLAN_CONTENTS A LEFT JOIN TB_PLAN_CONTENTS_ITEM B ON A.PLAN_CONT_SQ = B.PLAN_CONT_SQ
+								LEFT JOIN TB_GOODS C ON B.ITEM_VAL = C.GOODS_CD 
+	WHERE A.PLAN_SQ = #{planSq} AND A.TMPL_TYPE = #{tmplType}
+	</select>
+	
+	<select id="getPlanContentCouponList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentCouponList */
+		SELECT A.PLAN_CONT_SQ 
+			  ,A.PLAN_SQ 
+		      ,A.TMPL_TYPE 
+		      ,A.TITLE 
+		      ,A.LINK_URL 
+		      ,A.DISP_YN 
+		      ,A.DISP_ORD 
+		      ,A.REG_NO 
+		      ,B.ITEM_VAL AS cuItemVal
+		      ,C.CPN_ID 
+		      ,C.CPN_NM AS cuItemNm
+		FROM TB_PLAN_CONTENTS A LEFT JOIN TB_PLAN_CONTENTS_ITEM B ON A.PLAN_CONT_SQ = B.PLAN_CONT_SQ
+								LEFT JOIN TB_COUPON C ON B.ITEM_VAL = C.CPN_ID 
+		WHERE A.PLAN_SQ = #{planSq} AND A.TMPL_TYPE = #{tmplType}
+	</select>
+	
+	<select id="getPlanContentFileList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentFileList */
+		SELECT A.PLAN_CONT_SQ 
+			  ,A.PLAN_SQ 
+		      ,A.TMPL_TYPE 
+		      ,A.TITLE 
+		      ,A.LINK_URL 
+		      ,A.DISP_YN 
+		      ,A.DISP_ORD 
+		      ,A.REG_NO 
+		      ,B.ITEM_VAL AS fileItemVal
+		      ,B.PLAN_CONT_ITEM_SQ 
+		FROM TB_PLAN_CONTENTS A LEFT JOIN TB_PLAN_CONTENTS_ITEM B ON A.PLAN_CONT_SQ = B.PLAN_CONT_SQ
+		WHERE A.PLAN_SQ = #{planSq} AND A.TMPL_TYPE = #{tmplType}
+	</select>
+	
+	<!-- 기획전 템플릿 이미지 파일 삭제 -->
+	<delete id="deletePlanTemplateFile" parameterType="Plan">
+		/* TsaPlan.deletePlanTemplateFile */
+		DELETE FROM TB_PLAN_CONTENTS_ITEM
+		WHERE  PLAN_CONT_ITEM_SQ = #{planContItemSq}
+	</delete>
+	
+	<select id="getPlanContentFsrcList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentFsrcList */
+		SELECT A.PLAN_CONT_SQ 
+		  	 ,A.PLAN_SQ 
+		     ,A.TMPL_TYPE 
+		     ,A.TITLE 
+		     ,A.LINK_URL 
+		     ,A.DISP_YN 
+		     ,A.DISP_ORD 
+		     ,A.REG_NO 
+		     ,B.FRONT_GB 
+		     ,B.FSRC_BTM 
+		     ,B.FSRC_TOP 
+		FROM TB_PLAN_CONTENTS A LEFT JOIN TB_PLAN_FSRC B ON A.PLAN_SQ = B.PLAN_SQ 
+		WHERE A.PLAN_SQ = #{planSq} AND A.TMPL_TYPE = #{tmplType} 
+		ORDER BY FRONT_GB DESC
+	</select>
+	
+	<select id="getPlanContentGoodsList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentGoodsList */
+		SELECT A.PLAN_CONT_SQ 
+			  ,A.PLAN_SQ 
+		      ,A.TMPL_TYPE 
+		      ,A.TITLE 
+		      ,A.LINK_URL 
+		      ,A.DISP_YN 
+		      ,A.DISP_ORD 
+		      ,A.REG_NO 
+		FROM TB_PLAN_CONTENTS A 
+		WHERE A.PLAN_SQ = #{planSq}  AND TMPL_TYPE IN ('G082_50','G082_51','G082_52')
+	</select>
+	
+	<select id="getPlanContentGoodsDetailList" parameterType="Plan" resultType="Plan">
+		/* TsaPlan.getPlanContentGoodsDetailList */	
+		SELECT  B.PLAN_CONT_SQ 
+		      ,B.ITEM_VAL as goodsItemVal
+		      ,C.GOODS_NM
+		      ,C.LIST_PRICE 
+		      ,C.CURR_PRICE
+		      ,C.GOODS_STAT 
+		      ,D.BRAND_KNM 
+		      ,D.BRAND_ENM 
+		FROM tb_plan_contents_item B LEFT JOIN TB_GOODS C ON B.ITEM_VAL = C.GOODS_CD 
+									 LEFT JOIN TB_BRAND D ON C.BRAND_CD = D.BRAND_CD
+		WHERE B.PLAN_CONT_SQ IN 
+								(
+									SELECT A.PLAN_CONT_SQ 
+									FROM TB_PLAN_CONTENTS A 
+									WHERE A.PLAN_SQ = #{planSq}  AND TMPL_TYPE IN ('G082_50','G082_51','G082_52') AND PLAN_CONT_SQ = #{planContSq}
+								)
+	</select>
+	
+	<delete id="deletePlanContentItem" parameterType="Plan">
+		/* TsaPlan.getPlanContentGoodsDetailList */	
+		DELETE 
+		FROM TB_PLAN_CONTENTS_ITEM
+		WHERE PLAN_CONT_SQ = #{planContSq}
+	</delete>
+	
 	
 </mapper>
 

+ 252 - 19
src/main/webapp/WEB-INF/views/marketing/PlanTemplatePopupForm.html

@@ -26,6 +26,9 @@
 	<form id="planTemplateForm" name="planTemplateForm" action="#" th:method="post">
 			<input type="hidden" name="planSq" th:value="*{planSq}"/>
 			<input type="hidden" name="mode" th:value="*{mode}"/>
+			<input type="hidden" name="rePlanContSq">
+			<input type="hidden" name="cuPlanContSq">
+			<input type="hidden" name="filePlanContSq">
 			<div class="cardArea" style="height: 700px; margin: 3px;">
 
 				<div class="panelContent">
@@ -51,7 +54,7 @@
 											<table class="frmStyle">
 												<tr>
 													<th>리뷰 타이틀</th>
-													<td><input type="text" name="reTitle" class="w300 aR">
+													<td><input type="text" name="reTitle" class="w300 aR"/>
 													</td>
 												</tr>
 												<tr>
@@ -147,7 +150,7 @@
 										<col width="90%" />
 									</colgroup>
 									<tr>
-										<th>이미지 첨부<br/>[전시여부<label class="chkBox"><input type="checkbox" name="fileDispYn" value="Y"/></label>]</th>
+										<th>이미지 첨부<br/>[전시여부<label class="chkBox"><input type="checkbox" name="fileDispYn" value="N"/></label>]</th>
 										<td colspan="5">
 											<div id="registeredFile"></div>
 											<div style="display: block">
@@ -171,7 +174,7 @@
 										</td>
 
 										<th>전시순서</th>
-										<td><input type="text" name="fileDispYn" class="w100 aR" data-valid-type="numeric"></td>
+										<td><input type="text" name="fileDispOrd" class="w100 aR" data-valid-type="numeric"></td>
 									</tr>
 								</table>
 							</div>
@@ -912,12 +915,31 @@
 	
 	let AddgridRow;	
 	let goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+	let reviewList = [[${reviewList}]];
+	let couponList = [[${couponList}]];
+	let fileList = [[${fileList}]];
+	let fsrcListTop = [[${fsrcListTop}]];
+	let fsrcListBtm = [[${fsrcListBtm}]];
+	let goodsList = [[${goodsList}]];
+	let goodsDetailList1 = [[${goodsDetailList1}]];
+	let goodsDetailList2 = [[${goodsDetailList2}]];
+	let goodsDetailList3 = [[${goodsDetailList3}]];
+	let goodsDetailList4 = [[${goodsDetailList4}]];
+	let goodsDetailList5 = [[${goodsDetailList5}]];
+	let goodsDetailList6 = [[${goodsDetailList6}]];
+	let goodsDetailList7 = [[${goodsDetailList7}]];
+	let goodsDetailList8 = [[${goodsDetailList8}]];
+	let goodsDetailList9 = [[${goodsDetailList9}]];
+	let goodsDetailList10 = [[${goodsDetailList10}]];
+	
+	let mode = [[${mode}]]; 
+	
 	
 	// 리뷰 리스트 설정
 	var columnReviewList = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
 		{headerName: "상품ID", field: "reItemVal", width: 110, cellClass: 'text-center'},
-		{headerName: "상품명", field: "reItemNm", width: 120, cellClass: 'text-center'},
+		{headerName: "상품명", field: "reItemNm", width: 200, cellClass: 'text-center'},
 		{headerName: "시작일"			, field:'startSearchDate'	, width:110, cellClass: 'text-center',
 			cellEditor: 'datePicker',
 			cellEditorParams: { maxlength: 10, required: true },
@@ -1451,7 +1473,7 @@
 				mcxDialog.alert('이미지 전시순서를 입력하세요.');
 				return;
 			}
-			if(multiPlanFile.length == 0){
+			if(multiPlanFile.length == 0 && $("#dnFile").text() == null){
 				mcxDialog.alert('등록할 이미지를 등록하세요.');
 				return;
 			}
@@ -1707,7 +1729,76 @@
 		}
 	
 		
+		let goodsTemp1 = {};
+		let goodsTemp2 = {};
+		let goodsTemp3 = {};
+		let goodsTemp4 = {};
+		let goodsTemp5 = {};
+		let goodsTemp6 = {};
+		let goodsTemp7 = {};
+		let goodsTemp8 = {};
+		let goodsTemp9 = {};
+		let goodsTemp10 = {};
+		
+		goodsTemp1.goodsTitle = $('#planTemplateForm input[name=goodsTitle1]').val();
+		goodsTemp1.goodsUrl = $('#planTemplateForm input[name=goodsUrl1]').val();
+		goodsTemp1.goodsType = $('#planTemplateForm input:radio[name=goodsType1]:checked').val();
+		goodsTemp1.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd1]').val();
+		goodsTemp1.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn1]').val();
+		
+		goodsTemp2.goodsTitle = $('#planTemplateForm input[name=goodsTitle2]').val();
+		goodsTemp2.goodsUrl = $('#planTemplateForm input[name=goodsUrl2]').val();
+		goodsTemp2.goodsType = $('#planTemplateForm input:radio[name=goodsType2]:checked').val();
+		goodsTemp2.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd2]').val();
+		goodsTemp2.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn2]').val();
+		
+		goodsTemp3.goodsTitle = $('#planTemplateForm input[name=goodsTitle3]').val();
+		goodsTemp3.goodsUrl = $('#planTemplateForm input[name=goodsUrl3]').val();
+		goodsTemp3.goodsType = $('#planTemplateForm input:radio[name=goodsType3]:checked').val();
+		goodsTemp3.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd3]').val();
+		goodsTemp3.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn3]').val();
+		
+		goodsTemp4.goodsTitle = $('#planTemplateForm input[name=goodsTitle4]').val();
+		goodsTemp4.goodsUrl = $('#planTemplateForm input[name=goodsUrl4]').val();
+		goodsTemp4.goodsType = $('#planTemplateForm input:radio[name=goodsType4]:checked').val();
+		goodsTemp4.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd4]').val();
+		goodsTemp4.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn4]').val();
+		
+		goodsTemp5.goodsTitle = $('#planTemplateForm input[name=goodsTitle5]').val();
+		goodsTemp5.goodsUrl = $('#planTemplateForm input[name=goodsUrl5]').val();
+		goodsTemp5.goodsType = $('#planTemplateForm input:radio[name=goodsType5]:checked').val();
+		goodsTemp5.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd5]').val();
+		goodsTemp5.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn5]').val();
 		
+		goodsTemp6.goodsTitle = $('#planTemplateForm input[name=goodsTitle6]').val();
+		goodsTemp6.goodsUrl = $('#planTemplateForm input[name=goodsUrl6]').val();
+		goodsTemp6.goodsType = $('#planTemplateForm input:radio[name=goodsType6]:checked').val();
+		goodsTemp6.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd6]').val();
+		goodsTemp6.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn6]').val();
+		
+		goodsTemp7.goodsTitle = $('#planTemplateForm input[name=goodsTitle7]').val();
+		goodsTemp7.goodsUrl = $('#planTemplateForm input[name=goodsUrl7]').val();
+		goodsTemp7.goodsType = $('#planTemplateForm input:radio[name=goodsType7]:checked').val();
+		goodsTemp7.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd7]').val();
+		goodsTemp7.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn7]').val();
+		
+		goodsTemp8.goodsTitle = $('#planTemplateForm input[name=goodsTitle8]').val();
+		goodsTemp8.goodsUrl = $('#planTemplateForm input[name=goodsUrl8]').val();
+		goodsTemp8.goodsType = $('#planTemplateForm input:radio[name=goodsType8]:checked').val();
+		goodsTemp8.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd8]').val();
+		goodsTemp8.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn8]').val();
+		
+		goodsTemp9.goodsTitle = $('#planTemplateForm input[name=goodsTitle9]').val();
+		goodsTemp9.goodsUrl = $('#planTemplateForm input[name=goodsUrl9]').val();
+		goodsTemp9.goodsType = $('#planTemplateForm input:radio[name=goodsType9]:checked').val();
+		goodsTemp9.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd9]').val();
+		goodsTemp9.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn9]').val();
+		
+		goodsTemp10.goodsTitle = $('#planTemplateForm input[name=goodsTitle10]').val();
+		goodsTemp10.goodsUrl = $('#planTemplateForm input[name=goodsUrl10]').val();
+		goodsTemp10.goodsType = $('#planTemplateForm input:radio[name=goodsType10]:checked').val();
+		goodsTemp10.goodsDispOrd = $('#planTemplateForm input[name=goodsDispOrd10]').val();
+		goodsTemp10.goodsDispYn = $('#planTemplateForm input:checkbox[name=goodsDispYn10]').val();
 		
 		mcxDialog.confirm('기획전 템플릿을 등록 하시겠습니까?', {
 			cancelBtnText: "취소",
@@ -1723,16 +1814,19 @@
 						   ,multiPlanReviewEndT : multiPlanReviewEndT
 						   ,reTitle : $('#planTemplateForm input[name=reTitle]').val()
 						   ,reDispOrd : $('#planTemplateForm input[name=reDispOrd]').val()
+						   ,rePlanContSq : $('#planTemplateForm input[name=rePlanContSq]').val()
 						   ,reDispYn :  $('#planTemplateForm input:checkbox[name=reDispYn]').val()
 						   ,mode :  $('#planTemplateForm input[name=mode]').val()
 						   ,planSq : $('#planTemplateForm input[name=planSq]').val()
 						   ,multiPlanCoupon : multiPlanCoupon
 						   ,cuTitle : $('#planTemplateForm input[name=cuTitle]').val()              
-						   ,cuDispOrd : $('#planTemplateForm input[name=cuDispOrd]').val()          
+						   ,cuDispOrd : $('#planTemplateForm input[name=cuDispOrd]').val()        
+						   ,cuPlanContSq : $('#planTemplateForm input[name=cuPlanContSq]').val()
 						   ,cuDispYn :  $('#planTemplateForm input:checkbox[name=cuDispYn]').val()  
 						   ,multiPlanFile : multiPlanFile
 						   ,fileDispYn : $('#planTemplateForm input:checkbox[name=fileDispYn]').val() 
-						   ,filwDispOrd : $('#planTemplateForm input[name=filwDispOrd]').val()       
+						   ,fileDispOrd : $('#planTemplateForm input[name=fileDispOrd]').val()  
+						   ,filePlanContSq : $('#planTemplateForm input[name=filePlanContSq]').val()
 						   ,topFsrcDispYn : $('#planTemplateForm input:checkbox[name=topFsrcDispYn]').val() 
 						   ,btmFsrcDispYn : $('#planTemplateForm input:checkbox[name=btmFsrcDispYn]').val() 
 						   ,topFsrcDispOrd: $('#planTemplateForm input[name=topFsrcDispOrd]').val() 
@@ -1775,6 +1869,25 @@
 		uifnPopupClose('popupPlanTemplate');		
 	}
 	
+	// 첨부파일 삭제
+	var fnDeleteFile = function(obj, planSq, planContItemSq, fileItemVal) {
+		mcxDialog.confirm('정말 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function(){
+				var params = new Object();
+				params.planSq = planSq;
+				params.planContItemSq = planContItemSq;
+				params.fileItemVal = fileItemVal;
+
+				var jsonData = JSON.stringify(params);
+				gagajf.ajaxJsonSubmit('/marketing/planning/detail/template/file/delete', jsonData, function() {
+					$(obj).parent().remove();
+				});
+			}
+		});
+	}
+	
 	
 $(document).ready(function() {
 		// 썸머노트 그리기
@@ -1795,19 +1908,139 @@ $(document).ready(function() {
 		gagaAgGrid.createGrid("gridTempGbList8", gridOptions_p8);
 		gagaAgGrid.createGrid("gridTempGbList9", gridOptions_p9);
 		gagaAgGrid.createGrid("gridTempGbList10", gridOptions_p10);
-		/* 
-		gridOptions_c1.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c2.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c3.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c4.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c5.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c6.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c7.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c8.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c9.api.setRowData(mktmailGoodsInfo);
-		gridOptions_c10.api.setRowData(mktmailGoodsInfo);
-		 */
 		
+		if(mode == 'U'){
+			if(typeof reviewList[0] != 'undefined'){
+				// 리뷰
+				$('#planTemplateForm input[name=reTitle]').val(reviewList[0].title);
+				$('#planTemplateForm input[name=reDispOrd]').val(reviewList[0].dispOrd);
+				$('#planTemplateForm input[name=rePlanContSq]').val(reviewList[0].planContSq);
+				
+				if (reviewList[0].dispYn == 'Y') {
+					$('#planTemplateForm input:checkbox[name="reDispYn"]').prop('checked', true);
+				}
+				
+				gridOptionsPlanReviewList.api.setRowData(reviewList);
+				
+			}
+			if(typeof couponList[0] != 'undefined'){
+				//쿠폰
+				$('#planTemplateForm input[name=cuTitle]').val(couponList[0].title);
+				$('#planTemplateForm input[name=cuDispOrd]').val(couponList[0].dispOrd);
+				$('#planTemplateForm input[name=cuPlanContSq]').val(couponList[0].planContSq);
+				
+				if (couponList[0].dispYn == 'Y') {
+					$('#planTemplateForm input:checkbox[name="cuDispYn"]').prop('checked', true);
+				}
+				if(couponList.length > 0)
+				{
+					for (var i = 0; i <couponList.length; i++) {
+						var html =  '<tr>';
+						html += '<td colspan="3">';
+						html += '<input type="text" class="w300" id="cuItemNm" name="cuItemNm'+(i+1)+'" value="'+ couponList[i].cuItemNm +'"/>';
+						html += '<button type="button" class="btn icn" id="couponPlusBtn'+(i+1)+'"><i class="fa fa-search cpn" aria-hidden="true"></i></button>';
+						html += '<input id="cuItemVal" name="cuItemVal'+(i+1)+'" type="text" class="w100" maxlength="20" readonly="readonly" value="'+ couponList[i].cuItemVal +'"/>';
+						html += '<button type="button" class="btn icn" id="deleteCoupon'+(i+1)+'"><i class="fa fa-eraser" aria-hidden="true"></i></button>';
+						html += '</td>';
+						html += '</tr>';
+							
+						$("#couponTable").append(html);
+						
+						$('#couponPlusBtn'+(i+1)).attr("onclick","fnOpenCouponRetrievePopup('input[name=cuItemVal"+(i+1)+"]', 'input[name=cuItemNm"+(i+1)+"]');")
+						$('#deleteCoupon'+(i+1)).attr("onclick","deleteRowCoupon("+(i+1)+")");
+					}
+				}
+			}
+			
+			if(typeof fileList[0] != 'undefined'){
+				//파일
+				$('#planTemplateForm input[name=fileDispOrd]').val(fileList[0].dispOrd);
+				$('#planTemplateForm input[name=filePlanContSq]').val(fileList[0].planContSq);
+				
+				if (fileList[0].dispYn == 'Y') {
+					$('#planTemplateForm input:checkbox[name="fileDispYn"]').prop('checked', true);
+				}
+				
+				if(fileList.length > 0)
+				{
+					for (var i = 0; i <fileList.length; i++) {
+						var tag = '';
+						tag += '<span class="memAdd">';
+						tag += '	<a id="dnFile' + (i + 1) + '">' + fileList[i].fileItemVal + '</a>\n';
+						tag += '	<button type="button" onclick="fnDeleteFile(this, ' + fileList[i].planSq + ', ' +  fileList[i].planContItemSq + ', \'' +  fileList[i].fileItemVal + '\')">삭제</button>\n';
+						tag += '</span>';
+						$('#registeredFile').prepend(tag);
+							
+					}
+				}
+			}
+			
+			//html(하단)
+			if(typeof fsrcListBtm[0] != 'undefined'){
+				$('#planTemplateForm input[name=btmFsrcDispOrd]').val(fsrcListBtm[0].dispOrd);
+				
+				if (fsrcListBtm[0].dispYn == 'Y') {
+					$('#planTemplateForm input:checkbox[name="btmFsrcDispYn"]').prop('checked', true);
+				}
+				if(fsrcListBtm[0].frontGb == 'P')
+					$('#fsrcPcBtm').summernote('code', fsrcListBtm[0].fsrcBtm);
+				if(fsrcListBtm[1].frontGb == 'M')
+					$('#fsrcMobileBtm').summernote('code', fsrcListBtm[1].fsrcBtm);
+			}
+			
+			//html(상단)
+			if(typeof fsrcListTop[0] != 'undefined'){
+				$('#planTemplateForm input[name=topFsrcDispOrd]').val(fsrcListTop[0].dispOrd);
+				
+				if (fsrcListTop[0].dispYn == 'Y') {
+					$('#planTemplateForm input:checkbox[name="topFsrcDispYn"]').prop('checked', true);
+				}
+				if(fsrcListTop[0].frontGb == 'P')
+					$('#fsrcPcTop').summernote('code', fsrcListTop[0].fsrcTop);
+				if(fsrcListTop[1].frontGb == 'M')
+					$('#fsrcMobileTop').summernote('code', fsrcListTop[1].fsrcTop);
+			}
+			
+			//상품
+			if(typeof goodsList[0] != 'undefined'){
+				for (var i = 0; i < goodsList.length; i++) {
+					
+					
+					$('#planTemplateForm input[name=goodsTitle'+(i+1)+']').val(goodsList[i].title);						
+					$('#planTemplateForm input[name=goodsUrl'+(i+1)+']').val(goodsList[i].linkUrl);
+					$('#planTemplateForm input[name=goodsDispOrd'+(i+1)+']').val(goodsList[i].dispOrd);
+					
+					if (goodsList[0].dispYn == 'Y') {
+						$('#planTemplateForm input:checkbox[name=goodsDispYn'+(i+1)+']').prop('checked', true);
+					}
+					
+					if(goodsList[i].tmplType == "G082_50"){
+						$('#planTemplateForm input:radio[name=goodsType'+(i+1)+']:radio[value="G082_50"]').prop('checked', true);
+					}else if(goodsList[i].tmplType == "G082_51"){
+						$('#planTemplateForm input:radio[name=goodsType'+(i+1)+']:radio[value="G082_51"]').prop('checked', true);
+					}else if(goodsList[i].tmplType == "G082_52"){
+						$('#planTemplateForm input:radio[name=goodsType'+(i+1)+']:radio[value="G082_52"]').prop('checked', true);
+					}
+					
+					$('#btnAddGridNum' + (i + 1)).show();
+					
+					gridOptions_p1.api.setRowData(goodsDetailList1);
+					gridOptions_p2.api.setRowData(goodsDetailList2);
+					gridOptions_p3.api.setRowData(goodsDetailList3);
+					gridOptions_p4.api.setRowData(goodsDetailList4);
+					gridOptions_p5.api.setRowData(goodsDetailList5);
+					gridOptions_p6.api.setRowData(goodsDetailList6);
+					gridOptions_p7.api.setRowData(goodsDetailList7);
+					gridOptions_p8.api.setRowData(goodsDetailList8);
+					gridOptions_p9.api.setRowData(goodsDetailList9);
+					gridOptions_p10.api.setRowData(goodsDetailList10);
+					
+				}
+			}
+			
+		}
+		
+
 		$("#fileCnt").trigger('change');
 		
 });