Переглянути джерело

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

tsit14 5 роки тому
батько
коміт
67b5b65aa0
33 змінених файлів з 2803 додано та 2703 видалено
  1. 34 0
      pom.xml
  2. 117 89
      src/main/java/com/style24/admin/biz/dao/TsaMailTemplateDao.java
  3. 29 0
      src/main/java/com/style24/admin/biz/dao/TsaWithdrawDao.java
  4. 171 379
      src/main/java/com/style24/admin/biz/service/TsaMailTemplateService.java
  5. 66 19
      src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java
  6. 141 173
      src/main/java/com/style24/admin/biz/web/TsaMarketingController.java
  7. 70 0
      src/main/java/com/style24/admin/biz/web/TsaWithdrawController.java
  8. 23 0
      src/main/java/com/style24/persistence/domain/MailHeaderFooter.java
  9. 0 83
      src/main/java/com/style24/persistence/domain/MktmailManagement.java
  10. 0 33
      src/main/java/com/style24/persistence/domain/MktmailManagementGoods.java
  11. 0 29
      src/main/java/com/style24/persistence/domain/MktmailManagementTc.java
  12. 28 2
      src/main/java/com/style24/persistence/domain/Withdraw.java
  13. 10 15
      src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml
  14. 55 54
      src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml
  15. 261 328
      src/main/java/com/style24/persistence/mybatis/shop/TsaMailTemplate.xml
  16. 2 2
      src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml
  17. 137 1
      src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml
  18. 1 1
      src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html
  19. 4 4
      src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html
  20. 51 12
      src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html
  21. 41 53
      src/main/webapp/WEB-INF/views/marketing/MailHeaderFooterDetailForm.html
  22. 42 57
      src/main/webapp/WEB-INF/views/marketing/MailHeaderFooterForm.html
  23. 859 0
      src/main/webapp/WEB-INF/views/marketing/MailTemplateDetailForm.html
  24. 202 0
      src/main/webapp/WEB-INF/views/marketing/MailTemplateForm.html
  25. 34 0
      src/main/webapp/WEB-INF/views/marketing/MailTemplatePreviewForm.html
  26. 0 1078
      src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html
  27. 0 219
      src/main/webapp/WEB-INF/views/marketing/MktmailmanagementForm.html
  28. 0 54
      src/main/webapp/WEB-INF/views/marketing/MktmailmanagementPreviewForm.html
  29. 5 5
      src/main/webapp/WEB-INF/views/marketing/PlanTemplatePopupForm.html
  30. 8 12
      src/main/webapp/WEB-INF/views/pos/PosMainForm.html
  31. 349 0
      src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html
  32. 1 1
      src/main/webapp/WEB-INF/views/withdraw/WmsWithdrawListForm.html
  33. 62 0
      src/main/webapp/ux/js/admin.popup.js

+ 34 - 0
pom.xml

@@ -120,6 +120,40 @@
 	</dependencies>
 	
 	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<version>3.1.0</version>
+				<executions>
+					<execution>
+						<id>copyCore</id>
+						<phase>prepare-package</phase>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals>
+						<configuration>
+							<resources>
+								<resource>
+									<directory>
+										${basedir}/../style24.core/target/classes
+									</directory>
+									<filtering>
+										false
+									</filtering>
+									<includes>
+										<include>**/*</include>
+									</includes>
+								</resource>
+							</resources>
+							<outputDirectory>
+								${basedir}/target/classes
+							</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
 		<finalName>${project.name}</finalName>
 		<resources>
 			<resource>

+ 117 - 89
src/main/java/com/style24/admin/biz/dao/TsaMailTemplateDao.java

@@ -3,12 +3,11 @@ package com.style24.admin.biz.dao;
 import java.util.Collection;
 
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.CommonCode;
+import com.style24.persistence.domain.MailHeaderFooter;
 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.OrderSample;
+import com.style24.persistence.domain.MailTemplateCorner;
+import com.style24.persistence.domain.MailTemplateGoods;
 
 /**
  * 메일헤더푸터관리 Dao
@@ -18,113 +17,142 @@ import com.style24.persistence.domain.OrderSample;
  */
 @ShopDs
 public interface TsaMailTemplateDao {
-	
+
 	/**
-	 * 메일헤더푸터 관리 목록
-	 * @param mailtemplate - 메일관련 정보
+	 * 메일헤더푸터 목록
+	 * @param mailhf - 메일헤더푸터 정보
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 00
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	Collection<MailTemplate> getmailHFList(MailTemplate mailtemplate);
-	
+	Collection<MailHeaderFooter> getMailHeaderFooterList(MailHeaderFooter mailhf);
+
 	/**
-	 * 메일헤더푸터 상세
-	 * @param mailtemplate - 메일관련 정보
+	 * 메일헤더푸터 조회
+	 * @param mailhfSq - 메일헤더푸터일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 02
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	MailTemplate getMailHFDetail(Integer mailtemplate);
+	MailHeaderFooter getMailHeaderFooter(Integer mailhfSq);
 
 	/**
-	 * 메일헤더푸터 등록수정
-	 * @param  mailtemplate - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 03
+	 * 메일헤더푸터 저장
+	 * @param  mailhf - 메일헤더푸터 정보
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	void saveMailHF(MailTemplate mailtemplate);
-	
+	void saveMailHeaderFooter(MailHeaderFooter mailhf);
+
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param  mailtemplate - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 03
+	 * 메일헤더푸터 삭제
+	 * @param  mailhf - 메일헤더푸터 정보
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	void deleteMailHFList(MailTemplate mailtemplate);
-	
+	void deleteMailHeaderFooter(MailHeaderFooter mailhf);
+
 	/**
-	 * mkt메일관리 상세
-	 * @param mktmailManagement - 메일관련 정보
+	 * 메일템플릿 목록
+	 * @param mailtemplate - 메일템플릿 정보
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 16
-	 */
-	MktmailManagement getMktmailManagementDetail(Integer mailtSq);
-	Collection<MktmailManagementTc> getMktmailManagementTCList(MktmailManagementTc mktmailManagementTc);
-	Collection<MktmailManagementGoods> getMktmailManagementGoodsList(MktmailManagementTc mktmailManagementTc);
-	/**
-	 * MKT메일 등록수정
-	 * @param  mailtemplate - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 13
-	 */
-	void saveMktMailDetail(MktmailManagement mktMailManagement);
-	
-	/**
-	 * MKT메일 등록수정
-	 * @param  mailtemplate - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 13
-	 */
-	void saveMktMailTemplate(MktmailManagement mktMailManagement);
-	int saveMktmailform(MktmailManagement mktMailManagement);
-	int saveMailTc(MktmailManagement mktMailManagement);
-	int saveMailGoods(MktmailManagement mktMailManagement);
-	
-	
-	/* MKT 메일 전시 */
-	Collection<Goods> getMailGoodsInfo(Goods goods);
-	
-	/**
-	 * MKT메일 관리 목록
-	 * @param mailtemplate - 메일관련 정보
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	Collection<MailTemplate> getMailTemplateList(MailTemplate mailTemplate);
+
+	/**
+	 * 메일헤더푸터콤보박스 목록
+	 * @param mailhfGb - 메일헤더푸터구분
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 13
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	Collection<MktmailManagement> getMktMailList(MktmailManagement mktMailManagement);
+	Collection<CommonCode> getMailHeaderFooterComboList(String mailhfGb);
+
 	/**
-	 * MKT메일 리스트 삭제
-	 * @param  mktmailManagement - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 15
+	 * 메일템플릿 정보
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	void deleteMktmailList(MktmailManagement mktMailManagement);
+	MailTemplate getMailTemplate(Integer mailtSq);
+
+	/**
+	 * 메일템플릿코너 목록
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	Collection<MailTemplateCorner> getMailTemplateCornerList(Integer mailtSq);
+
 	/**
-	 * MKT메일 구분자 삭제
-	 * @param  mktmailManagement - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 22
+	 * 메일템플릿코너상품 목록
+	 * @param mailtcSq - 메일템플릿코너일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	void deleteMktCorner(MktmailManagementTc mktmailManagementTc);
+	Collection<MailTemplateGoods> getMailTemplateCornerGoodsList(Integer mailtcSq);
+
 	/**
-	 * MKT메일 상품 삭제
-	 * @param  mktmailManagement - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 22
+	 * 메일템플릿 저장 처리
+	 * @param mailTemplate - 메일템플릿 정보
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 12
 	 */
-	void deleteMktGoodsList(MktmailManagementGoods mktmailManagementGoods);
+	void saveMailTemplate(MailTemplate mailTemplate);
+
+	/**
+	 * 메일템플릿코너 저장 처리
+	 * @param mailTemplateCorner - 메일템플릿코너 정보
+	 * @author gagamel
+	 * @since 2021. 5. 12
+	 */
+	void saveMailTemplateCorner(MailTemplateCorner mailTemplateCorner);
+
+	/**
+	 * 메일템플릿코너상품 저장 처리
+	 * @param mailTemplateGoods - 메일템플릿코너상품 정보
+	 * @author gagamel
+	 * @since 2021. 5. 12
+	 */
+	void saveMailTemplateCornerGoods(MailTemplateGoods mailTemplateGoods);
+
+	/**
+	 * 메일템플릿 삭제
+	 * @param mailTemplate - 메일템플릿 정보
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	void deleteMailTemplate(MailTemplate mailTemplate);
+
+	/**
+	 * 메일템플릿코너 삭제
+	 * @param mailTemplateCorner - 메일템플릿코너 정보
+	 * @author gagamel
+	 * @since 2021. 5. 12
+	 */
+	void deleteMailTemplateCorner(MailTemplateCorner mailTemplateCorner);
+
+	/**
+	 * 메일템플릿코너상품 삭제
+	 * @param  mailTemplateGoods - 메일템플릿코너상품 정보
+	 * @author gagamel
+	 * @since 2021. 5. 12
+	 */
+	void deleteMailTemplateCornerGoods(MailTemplateGoods mailTemplateGoods);
+
 	/**
-	 * MKT 메일 미리보기
-	 * @param mktmailManagement - 메일관련 정보
+	 * 메일템플릿 미리보기 조회
+	 * @param mailtSq - 메일템플릿일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 19
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	MktmailManagement getMktmailPreviewHeader(Integer mktMailManagement);
-	MktmailManagement getMktmailPreviewFooter(Integer mktMailManagement);
-	MktmailManagement getMktmailPreviewContent(Integer mktMailManagement);
-	Collection<MktmailManagementGoods> getMktmailPreviewGoodsList(MktmailManagementTc mktmailManagementTc);
+	MailTemplate getMailTemplatePreview(Integer mailtSq);
 
 }

+ 29 - 0
src/main/java/com/style24/admin/biz/dao/TsaWithdrawDao.java

@@ -89,6 +89,35 @@ public interface TsaWithdrawDao {
 	WmsWithdraw getOptionInfo(WmsWithdraw wmswithdraw);
 		
 	
+	/**
+	 * 회수지시 목록 건수
+	 * 
+	 * @param Withdraw
+	 * @return int
+	 * @author moon
+	 * @since 2021. 05. 10
+	 */
+	int getWithdrawDirectiveListCount(Withdraw withdraw);
+
+	/**
+	 * 회수지시 목록 
+	 * 
+	 * @param Withdraw
+	 * @return Collection<WmsWithdraw>
+	 * @author moon
+	 * @since 2021. 05. 10
+	 */
+	Collection<Withdraw> getWithdrawDirectiveList(Withdraw withdraw);
+	
+	/**
+	 * 재회수지시
+	 * 
+	 * @param Withdraw
+	 * @return 
+	 * @author moon
+	 * @since 2021. 05. 11
+	 */
+	void updateReRecallOrder(Withdraw withdraw);
 	
 	
 	/**

+ 171 - 379
src/main/java/com/style24/admin/biz/service/TsaMailTemplateService.java

@@ -2,20 +2,17 @@ package com.style24.admin.biz.service;
 
 import java.util.Collection;
 
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.gagaframework.web.parameter.GagaMap;
-import com.gagaframework.web.rest.server.GagaResponseStatus;
 import com.style24.admin.biz.dao.TsaMailTemplateDao;
 import com.style24.admin.support.security.session.TsaSession;
-import com.style24.persistence.domain.Goods;
+import com.style24.persistence.domain.CommonCode;
+import com.style24.persistence.domain.MailHeaderFooter;
 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.MailTemplateCorner;
+import com.style24.persistence.domain.MailTemplateGoods;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -31,440 +28,235 @@ import lombok.extern.slf4j.Slf4j;
 public class TsaMailTemplateService {
 
 	@Autowired
-	private TsaMailTemplateDao mailtempletDao;
+	private TsaMailTemplateDao mailTemplateDao;
 
 	/**
-	 * 메일헤더푸터관리 목록
-	 * @param mailtemplate - 메일관련 정보
+	 * 메일헤더푸터 목록
+	 * @param mailhf - 메일헤더푸터 정보
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 02
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	public Collection<MailTemplate> getmailHFList(MailTemplate mailtemplate) {
-		return mailtempletDao.getmailHFList(mailtemplate);
+	public Collection<MailHeaderFooter> getMailHeaderFooterList(MailHeaderFooter mailhf) {
+		return mailTemplateDao.getMailHeaderFooterList(mailhf);
 	}
-	
+
 	/**
-	 * 메일헤더푸터관리 상세화면
-	 * @param mailtemplate - 메일관련 정보
+	 * 메일헤더푸터 조회
+	 * @param mailhfSq - 메일헤더푸터일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 02
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	public MailTemplate getMailHFDetail(Integer mailtemplate) {
-		return mailtempletDao.getMailHFDetail(mailtemplate);
+	public MailHeaderFooter getMailHeaderFooter(Integer mailhfSq) {
+		return mailTemplateDao.getMailHeaderFooter(mailhfSq);
 	}
-	
 
 	/**
-	 * 메일헤더푸터 상세 등록/수정
-	 * @param mailtemplate - 메일관련 정보
+	 * 메일헤더푸터 저장 처리
+	 * @param mailhf - 메일헤더푸터 정보
+	 * @author gagamel
+	 * @since 2021. 5. 13
+	 */
+	@Transactional("shopTxnManager")
+	public void saveMailHeaderFooter(MailHeaderFooter mailhf) {
+		mailhf.setRegNo(TsaSession.getInfo().getUserNo());
+		mailhf.setUpdNo(TsaSession.getInfo().getUserNo());
+		mailhf.setMailhfContent(mailhf.getMailhfContent().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
+		mailTemplateDao.saveMailHeaderFooter(mailhf);
+	}
+
+	/**
+	 * 메일헤더푸터 삭제
+	 * @param mailhfSq - 메일헤더푸터일련번호
 	 * @author csh9191
 	 * @since 2021. 02. 03
 	 */
 	@Transactional("shopTxnManager")
-	public void saveMailHF(MailTemplate mailtemplate) {
-		// 내용 유무 확인
-		if (StringUtils.isNotBlank(mailtemplate.getMailhfContent())) {
-			mailtemplate.setMailhfContent(mailtemplate.getMailhfContent().replaceAll("&lt;", "<").replaceAll("&gt;", ">"));
-		}
-
-		mailtempletDao.saveMailHF(mailtemplate);
-	
+	public void deleteMailHeaderFooter(Integer mailhfSq) {
+		MailHeaderFooter mailhf = new MailHeaderFooter();
+		mailhf.setMailhfSq(mailhfSq);
+		mailhf.setUpdNo(TsaSession.getInfo().getUserNo());
+		mailTemplateDao.deleteMailHeaderFooter(mailhf);
 	}
-	
+
 	/**
-	 * 메일헤더푸터 리스트 삭제
+	 * 메일헤더푸터 목록 삭제
 	 * @param mailtemplate - 메일관련 정보
 	 * @author csh9191
 	 * @since 2021. 02. 03
 	 */
 	@Transactional("shopTxnManager")
-	public void deleteMailHFList(Collection<MailTemplate> mailTemplateList) {
-		int userId = TsaSession.getInfo().getUserNo();
-		
-		for(MailTemplate mailtemplate : mailTemplateList) {
-			mailtemplate.setRegNo(userId);
-			mailtemplate.setUpdNo(userId);
-			mailtempletDao.deleteMailHFList(mailtemplate);
+	public void deleteMailHeaderFooterList(Collection<MailHeaderFooter> mailhfList) {
+		for (MailHeaderFooter mailhf : mailhfList) {
+			mailhf.setUpdNo(TsaSession.getInfo().getUserNo());
+			mailTemplateDao.deleteMailHeaderFooter(mailhf);
 		}
 	}
-	
+
 	/**
-	 * MKT메일관리 상세화면
-	 * @param mktmailManagement - 메일템플릿관련 정보
-	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 05
+	 * 메일템플릿 저장 처리
+	 * @param mailTemplate - 메일템플릿 정보
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	public MktmailManagement getMktmailManagementDetail(Integer mailtSq) {
-		return mailtempletDao.getMktmailManagementDetail(mailtSq);
+	@Transactional("shopTxnManager")
+	public void saveMailTemplate(MailTemplate mailTemplate) {
+		mailTemplate.setRegNo(TsaSession.getInfo().getUserNo());
+		mailTemplate.setUpdNo(TsaSession.getInfo().getUserNo());
+
+		// 1.메일템플릿 등록 처리
+		mailTemplateDao.saveMailTemplate(mailTemplate);
+
+		// 등록된 메일템플릿번호 값 가져오기
+		Integer mailtSq = mailTemplate.getMailtSq();
+		log.info("mailtSq: {}", mailtSq);
+		mailTemplate.setMailtSq(mailtSq);
+
+		// 2.메일템플릿코너 저장 처리
+		Collection<MailTemplateCorner> mtcList = mailTemplate.getMailtcList();
+		if (mtcList.size() > 0) {
+			for (MailTemplateCorner mtc : mtcList) {
+				mtc.setMailtSq(mailTemplate.getMailtSq());
+				mtc.setRegNo(TsaSession.getInfo().getUserNo());
+				mtc.setUpdNo(TsaSession.getInfo().getUserNo());
+				mailTemplateDao.saveMailTemplateCorner(mtc);
+
+				// 등록된 메일템플릿코너번호 값 가져오기
+				Integer mailtcSq = mtc.getMailtcSq();
+				log.info("mailtcSq: {}", mailtcSq);
+				mtc.setMailtcSq(mailtcSq);
+
+				// 3.메일템플릿코너상품 저장 처리
+				Collection<MailTemplateGoods> mtcgList = mtc.getMailtcGoodsList();
+				if (mtcgList.size() > 0) {
+					for (MailTemplateGoods mtcg : mtcgList) {
+						mtcg.setMailtcSq(mtc.getMailtcSq());
+						mtcg.setRegNo(TsaSession.getInfo().getUserNo());
+						mtcg.setUpdNo(TsaSession.getInfo().getUserNo());
+						mailTemplateDao.saveMailTemplateCornerGoods(mtcg);
+					}
+				}
+			}
+		}
 	}
+
 	/**
-	 * MKT메일관리 구분자 상세화면
-	 * @param mktmailManagementTc
+	 * 메일템플릿 목록
+	 * @param mailTemplate - 메일템플릿 정보
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 16
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	public Collection<MktmailManagementTc> getMktmailManagementTCList(Integer mailtSq) {
-		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
-		mktmailManagementTc.setMailtSq(mailtSq);
-		
-		return mailtempletDao.getMktmailManagementTCList(mktmailManagementTc);
+	public Collection<MailTemplate> getMailTemplateList(MailTemplate mailTemplate) {
+		return mailTemplateDao.getMailTemplateList(mailTemplate);
 	}
+
 	/**
-	 * MKT메일관리 상품 상세화면
-	 * @param mktmailManagementTc
+	 * 메일헤더푸터콤보박스 목록
+	 * @param mailhfGb - 메일헤더푸터구분
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 16
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	public Collection<MktmailManagementGoods> getMktmailManagementGoodsList(Integer mailtcSq) {
-		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
-		mktmailManagementTc.setMailtcSq(mailtcSq);
-		
-		log.info("mktmailManagementTc {}",mktmailManagementTc);
-		
-		return mailtempletDao.getMktmailManagementGoodsList(mktmailManagementTc);
+	public Collection<CommonCode> getMailHeaderFooterComboList(String mailhfGb) {
+		return mailTemplateDao.getMailHeaderFooterComboList(mailhfGb);
 	}
-	
+
 	/**
-	 * MKT미리보기 상품정보
-	 * @param mktmailManagementTc
+	 * 메일템플릿 정보
+	 * @param mailtSq - 메일템플릿일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 24
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	public Collection<MktmailManagementGoods> getMktmailPreviewGoodsList(Integer mailtcSq) {
-		MktmailManagementTc mktmailManagementTc = new MktmailManagementTc();
-		mktmailManagementTc.setMailtcSq(mailtcSq);
-		
-		log.info("mktmailManagementTc {}",mktmailManagementTc);
-		
-		return mailtempletDao.getMktmailPreviewGoodsList(mktmailManagementTc);
+	public MailTemplate getMailTemplate(Integer mailtSq) {
+		return mailTemplateDao.getMailTemplate(mailtSq);
 	}
-	
+
 	/**
-	 * MKT 상세 등록/수정
-	 * @param mktmailManagement - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 13
+	 * 메일템플릿코너 목록
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	@Transactional("shopTxnManager")
-	public GagaMap saveMktMailTemplate (MktmailManagement mktMailManagement) {
-		GagaMap result = new GagaMap();
-		
-		int mailHsq = mktMailManagement.getMktHeader();
-		int mailFsq = mktMailManagement.getMktFooter();
-		String mailtNm = mktMailManagement.getMailtNm();
-		String mailtGb = mktMailManagement.getMailtGb();
-		String mailContent = mktMailManagement.getMailContent();
-		log.info("mailtSq {}",mktMailManagement.getMailtSq());
-		MktmailManagement mktmail = new MktmailManagement();
-
-		mktmail.setMktHeader(mailHsq);
-		mktmail.setMktFooter(mailFsq);
-		mktmail.setMailtNm(mailtNm);
-		mktmail.setMailtGb(mailtGb);
-		mktmail.setMailContent(mailContent);
-		mktmail.setRegNo(TsaSession.getInfo().getUserNo());
-		mktmail.setUpdNo(TsaSession.getInfo().getUserNo());
-		mktmail.setMailtSq(mktMailManagement.getMailtSq());
-		
-		log.info("mktmail : {}", mktMailManagement.getMailtSq());
-		
-		//메일 헤더 푸터 타이틀 내용 등록
-		mailtempletDao.saveMktmailform(mktmail); 
-
-		//구분자1 등록
-		for(MktmailManagementTc mktmailManagementTc : mktMailManagement.getMktmailManagementTc()) {
-			if(!StringUtils.isEmpty(mktmailManagementTc.getMailtcNm())) {
-				
-				String mailtcNm = mktmailManagementTc.getMailtcNm();
-				String mailtcLink = mktmailManagementTc.getMailtcLink();
-				int goodsCpr = mktmailManagementTc.getGoodsCpr();
-				
-				MktmailManagement mktmailtc = new MktmailManagement();
-				
-				mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
-				mktmailtc.setUpdNo(TsaSession.getInfo().getUserNo());
-				mktmailtc.setMailtcNm(mailtcNm);
-				mktmailtc.setMailtcLink(mailtcLink);
-				mktmailtc.setGoodsCpr(goodsCpr);
-				mktmailtc.setMailtSq(mktmail.getMailtSq());
-				mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
-				
-				log.info("구분자1.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
-				
-				mailtempletDao.saveMailTc(mktmailtc);
-				//grid1
-				for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods()) {
-					
-					String goodsCd = mktmailManagementGoods.getGoodsCd();
-					int dispOrd = mktmailManagementGoods.getDispOrd();
-	
-					MktmailManagement mktmailGoods = new MktmailManagement();
-					
-					mktmailGoods.setRegNo(TsaSession.getInfo().getUserNo());
-					mktmailGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-					mktmailGoods.setDispOrd(dispOrd);
-					mktmailGoods.setGoodsCd(goodsCd);
-					mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
-					
-					log.info("그리드1.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
-					//grid 데이터 등록
-					mailtempletDao.saveMailGoods(mktmailGoods);
-				}
-			}
-		}
-		
-
-		//구분자2 등록
-		for(MktmailManagementTc mktmailManagementTc : mktMailManagement.getMktmailManagementTc2()) {
-			if(!StringUtils.isEmpty(mktmailManagementTc.getMailtcNm())) {
-				String mailtcNm = mktmailManagementTc.getMailtcNm();
-				String mailtcLink = mktmailManagementTc.getMailtcLink();
-				int goodsCpr = mktmailManagementTc.getGoodsCpr();
-
-				MktmailManagement mktmailtc = new MktmailManagement();
-	
-				mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
-				mktmailtc.setUpdNo(TsaSession.getInfo().getUserNo());
-				mktmailtc.setMailtcNm(mailtcNm);
-				mktmailtc.setMailtcLink(mailtcLink);
-				mktmailtc.setGoodsCpr(goodsCpr);
-				mktmailtc.setMailtSq(mktmail.getMailtSq());
-				mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
-				
-				log.info("구분자2.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
-				
-				mailtempletDao.saveMailTc(mktmailtc);
-				//grid2
-				for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods2()) {
-	
-					String goodsCd = mktmailManagementGoods.getGoodsCd();
-					int dispOrd = mktmailManagementGoods.getDispOrd();
-	
-					MktmailManagement mktmailGoods = new MktmailManagement();
-	
-					mktmailGoods.setRegNo(TsaSession.getInfo().getUserNo());
-					mktmailGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-					mktmailGoods.setDispOrd(dispOrd);
-					mktmailGoods.setGoodsCd(goodsCd);
-					mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
-					
-					log.info("그리드2.getMailtcSq() : {}", mktmailtc.getMailtcSq());
-					//grid 데이터 등록
-					mailtempletDao.saveMailGoods(mktmailGoods);
-				}
-			}
-		}
-		
-		//구분자3 등록
-		for(MktmailManagementTc mktmailManagementTc : mktMailManagement.getMktmailManagementTc3()) {
-			if(!StringUtils.isEmpty(mktmailManagementTc.getMailtcNm())) {
-			String mailtcNm = mktmailManagementTc.getMailtcNm();
-			String mailtcLink = mktmailManagementTc.getMailtcLink();
-			int goodsCpr = mktmailManagementTc.getGoodsCpr();
-			
-			MktmailManagement mktmailtc = new MktmailManagement();
-
-			mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
-			mktmailtc.setUpdNo(TsaSession.getInfo().getUserNo());
-			mktmailtc.setMailtcNm(mailtcNm);
-			mktmailtc.setMailtcLink(mailtcLink);
-			mktmailtc.setGoodsCpr(goodsCpr);
-			mktmailtc.setMailtSq(mktmail.getMailtSq());
-			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
-							
-			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
-			
-			mailtempletDao.saveMailTc(mktmailtc);
-			//grid3
-			for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods3()) {
-
-				String goodsCd = mktmailManagementGoods.getGoodsCd();
-				int dispOrd = mktmailManagementGoods.getDispOrd();
-
-				MktmailManagement mktmailGoods = new MktmailManagement();
-
-				mktmailGoods.setRegNo(TsaSession.getInfo().getUserNo());
-				mktmailGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-				mktmailGoods.setDispOrd(dispOrd);
-				mktmailGoods.setGoodsCd(goodsCd);
-				mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
-				
-				log.info("그리드3.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());//grid 데이터 등록
-				mailtempletDao.saveMailGoods(mktmailGoods);
-			}
-			}
-		}
+	public Collection<MailTemplateCorner> getMailTemplateCornerList(Integer mailtSq) {
+		// 메일템플릿코너 목록
+		Collection<MailTemplateCorner> mtcList = mailTemplateDao.getMailTemplateCornerList(mailtSq);
 
-		//구분자4 등록
-		for(MktmailManagementTc mktmailManagementTc : mktMailManagement.getMktmailManagementTc4()) {
-			if(!StringUtils.isEmpty(mktmailManagementTc.getMailtcNm())) {
-			String mailtcNm = mktmailManagementTc.getMailtcNm();
-			String mailtcLink = mktmailManagementTc.getMailtcLink();
-			int goodsCpr = mktmailManagementTc.getGoodsCpr();
-			
-			MktmailManagement mktmailtc = new MktmailManagement();
-
-			mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
-			mktmailtc.setUpdNo(TsaSession.getInfo().getUserNo());
-			mktmailtc.setMailtcNm(mailtcNm);
-			mktmailtc.setMailtcLink(mailtcLink);
-			mktmailtc.setGoodsCpr(goodsCpr);
-			mktmailtc.setMailtSq(mktmail.getMailtSq());
-			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());	
-							
-			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
-			
-			
-			mailtempletDao.saveMailTc(mktmailtc);
-			//grid4
-			for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods4()) {
-				
-				String goodsCd = mktmailManagementGoods.getGoodsCd();
-				int dispOrd = mktmailManagementGoods.getDispOrd();
-
-				MktmailManagement mktmailGoods = new MktmailManagement();
-				
-				mktmailGoods.setRegNo(TsaSession.getInfo().getUserNo());
-				mktmailGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-				mktmailGoods.setDispOrd(dispOrd);
-				mktmailGoods.setGoodsCd(goodsCd);
-				mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
-				
-				log.info("그리드4.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
-				//grid 데이터 등록
-				mailtempletDao.saveMailGoods(mktmailGoods);
-			}
+		if (mtcList != null && !mtcList.isEmpty()) {
+			for (MailTemplateCorner mtc : mtcList) {
+				// 메일템플릿코너상품 목록
+				mtc.setMailtcGoodsList(mailTemplateDao.getMailTemplateCornerGoodsList(mtc.getMailtcSq()));
 			}
 		}
-		
-		//구분자5 등록
-		for(MktmailManagementTc mktmailManagementTc : mktMailManagement.getMktmailManagementTc5()) {
-			if(!StringUtils.isEmpty(mktmailManagementTc.getMailtcNm())) {
-			String mailtcNm = mktmailManagementTc.getMailtcNm();
-			String mailtcLink = mktmailManagementTc.getMailtcLink();
-			int goodsCpr = mktmailManagementTc.getGoodsCpr();
-			
-			MktmailManagement mktmailtc = new MktmailManagement();
-
-			mktmailtc.setRegNo(TsaSession.getInfo().getUserNo());
-			mktmailtc.setUpdNo(TsaSession.getInfo().getUserNo());
-			mktmailtc.setMailtcNm(mailtcNm);
-			mktmailtc.setMailtcLink(mailtcLink);
-			mktmailtc.setGoodsCpr(goodsCpr);
-			mktmailtc.setMailtSq(mktmail.getMailtSq());
-			mktmailtc.setMailtcSq(mktmailManagementTc.getMailtcSq());
-							
-			log.info("mktmailManagementTc : {}",mktmailManagementTc.getMailtcSq());
-			
-			
-			mailtempletDao.saveMailTc(mktmailtc);
-			
-			//grid5
-			for (MktmailManagementGoods mktmailManagementGoods : mktMailManagement.getMktmailManagementGoods5()) {
-				
-				String goodsCd = mktmailManagementGoods.getGoodsCd();
-				int dispOrd = mktmailManagementGoods.getDispOrd();
-				
-				MktmailManagement mktmailGoods = new MktmailManagement();
-				
-				mktmailGoods.setRegNo(TsaSession.getInfo().getUserNo());
-				mktmailGoods.setUpdNo(TsaSession.getInfo().getUserNo());
-				mktmailGoods.setDispOrd(dispOrd);
-				mktmailGoods.setGoodsCd(goodsCd);
-				mktmailGoods.setMailtcSq(mktmailtc.getMailtcSq());
-				
-				log.info("그리드5.getMailtcSq() : {}", mktmailManagementTc.getMailtcSq());
-				//grid 데이터 등록
-				mailtempletDao.saveMailGoods(mktmailGoods);
-			}
-			}
-		}
-
-
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
 
-		return result;
-	}
-	
-	/* MKT 메일 상품전시 */
-	public Collection<Goods> getMailGoodsInfo(Goods goods) {
-		return mailtempletDao.getMailGoodsInfo(goods);
-	}
-	
-	/**
-	 * MKT메일관리 목록
-	 * @param mktmailManagement - 메일관련 정보
-	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 13
-	 */
-	public Collection<MktmailManagement> getMktMailList(MktmailManagement mktmailManagement) {
-		return mailtempletDao.getMktMailList(mktmailManagement);
+		return mtcList;
 	}
-	
+
 	/**
-	 * MKT메일 목록 삭제
-	 * @param mktmailManagement - 메일관련 정보
-	 * @author csh9191
-	 * @since 2021. 02. 15
+	 * 메일템플릿 목록 삭제
+	 * @param mailTemplateList - 메일템플릿 목록
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
 	@Transactional("shopTxnManager")
-	public void deleteMktmailList(Collection<MktmailManagement> mktmailManagementList) {
-		int userId = TsaSession.getInfo().getUserNo();
-		
-		for(MktmailManagement mktmailManagement : mktmailManagementList) {
-			mktmailManagement.setRegNo(userId);
-			mktmailManagement.setUpdNo(userId);
-			mailtempletDao.deleteMktmailList(mktmailManagement);
+	public void deleteMailTemplateList(Collection<MailTemplate> mailTemplateList) {
+		for (MailTemplate mailTemplate : mailTemplateList) {
+			mailTemplate.setRegNo(TsaSession.getInfo().getUserNo());
+			mailTemplate.setUpdNo(TsaSession.getInfo().getUserNo());
+			mailTemplateDao.deleteMailTemplate(mailTemplate);
 		}
 	}
+
 	/**
-	 * MKT메일 구분자 삭제
-	 * @param mktmailManagementGoods 메일전시상품
-	 * @author csh9191
-	 * @since 2021. 02. 22
+	 * 메일템플릿코너 삭제
+	 * @param mailtcSq - 메일템플릿코너일련번호
+	 * @author gagamel
+	 * @since 2021. 5. 12
 	 */
 	@Transactional("shopTxnManager")
-	public void deleteMktCorner(Collection<MktmailManagementTc> mktmailManagementTcList) {
-		for(MktmailManagementTc mktmailManagementTc : mktmailManagementTcList) {
-			mailtempletDao.deleteMktCorner(mktmailManagementTc);
-		}
+	public void deleteMailTemplateCorner(Integer mailtcSq) {
+		MailTemplateCorner mtc = new MailTemplateCorner();
+		mtc.setMailtcSq(mailtcSq);
+		mtc.setUpdNo(TsaSession.getInfo().getUserNo());
+		mailTemplateDao.deleteMailTemplateCorner(mtc);
 	}
-	
+
 	/**
-	 * MKT메일 상품 삭제
-	 * @param mktmailManagementGoods 메일전시상품
-	 * @author csh9191
-	 * @since 2021. 02. 22
+	 * 메일템플릿코너상품 목록 삭제
+	 * @param mtcgList - 메일템플릿코너상품 목록
+	 * @author gagamel
+	 * @since 2021. 5. 12
 	 */
 	@Transactional("shopTxnManager")
-	public void deleteMktGoodsList(Collection<MktmailManagementGoods> mktmailManagementGoodsList) {
-		for(MktmailManagementGoods mktmailManagementGoods : mktmailManagementGoodsList) {
-			mailtempletDao.deleteMktGoodsList(mktmailManagementGoods);
+	public void deleteMailTemplateCornerGoodsList(Collection<MailTemplateGoods> mtcgList) {
+		for (MailTemplateGoods mtcg : mtcgList) {
+			mailTemplateDao.deleteMailTemplateCornerGoods(mtcg);
 		}
 	}
-	
+
 	/**
-	 * MKT메일 미리보기
-	 * @param mktmailManagement - 메일관련 정보
+	 * 메일템플릿 미리보기 조회
+	 * @param mailtSq - 메일템플릿일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 19
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	public MktmailManagement getMktmailPreviewHeader(Integer mktMailManagement) {
-		return mailtempletDao.getMktmailPreviewHeader(mktMailManagement);
-	}
-	public MktmailManagement getMktmailPreviewFooter(Integer mktMailManagement) {
-		return mailtempletDao.getMktmailPreviewFooter(mktMailManagement);
-	}
-	public MktmailManagement getMktmailPreviewContent(Integer mktMailManagement) {
-		return mailtempletDao.getMktmailPreviewContent(mktMailManagement);
+	public MailTemplate getMailTemplatePreview(Integer mailtSq) {
+		MailTemplate mailTemplate = mailTemplateDao.getMailTemplatePreview(mailtSq);
+
+		// 마케팅메일이면
+		if (mailTemplate.getMailtGb().equals("M")) {
+			// 메일템플릿코너 목록
+			Collection<MailTemplateCorner> mtcList = this.getMailTemplateCornerList(mailtSq);
+			log.info("{}", mtcList);
+
+			// TODO: mailContent 값과 mtcList의 값을 가지고 치환 처리
+		}
+
+		return mailTemplate;
 	}
-	
+
 }

+ 66 - 19
src/main/java/com/style24/admin/biz/service/TsaWithdrawService.java

@@ -4,37 +4,23 @@ 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.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import lombok.extern.slf4j.Slf4j;
-
-//import com.gagaframework.web.parameter.GagaMap;
-//import com.gagaframework.web.util.GagaDateUtil;
-
 import com.style24.admin.biz.dao.TsaDeliveryDao;
-//import com.style24.admin.biz.dao.TsaOrderDao;
 import com.style24.admin.biz.dao.TsaWithdrawDao;
-import com.style24.persistence.domain.Delivery;
-//import com.style24.persistence.domain.Coupon;
-//import com.style24.persistence.domain.Delivery;
-//import com.style24.persistence.domain.Order;
-//import com.style24.persistence.domain.PayGate;
-//import com.style24.persistence.domain.Point;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.persistence.domain.OrderChange;
 import com.style24.persistence.domain.Withdraw;
 import com.style24.persistence.domain.WithdrawExc;
 import com.style24.persistence.domain.WmsWithdraw;
+import com.style24.core.support.env.TscConstants.OrderChangeStat;
+import com.style24.core.biz.dao.TscOrderChangeDao;
+import com.style24.core.support.env.TscConstants.OrderChangeGb;
 
-//import com.style24.admin.support.env.TsaConstants;
-//import com.style24.admin.support.env.TsaConstants.OrderStat;
-//import com.style24.admin.support.env.TsaConstants.PayMeans;
-//import com.style24.admin.support.env.TsaConstants.PaymentStat;
-//import com.style24.admin.support.env.TsaConstants.PurchaseReturnGb;
-//import com.style24.admin.support.env.TsaConstants.UsacGb;
 
 import com.style24.core.support.message.TscMessageByLocale;
-//import com.style24.admin.support.security.session.TsaSession;
 
 /**
  * 회수관리 Service
@@ -55,6 +41,9 @@ public class TsaWithdrawService {
 	@Autowired
 	private TsaDeliveryDao deliveryDao;
 
+	@Autowired
+	private TscOrderChangeDao orderChangeDao;
+	
 	//@Autowired
 	//private TsaOrderDao orderDao;
 
@@ -152,6 +141,64 @@ public class TsaWithdrawService {
 		return wmsWithdrawList; 
 	}	
 	
+	
+	/**
+	 * 회수지시목록 건수
+	 *
+	 * @param Withdraw
+	 * @return
+	 * @author moon
+	 * @since 2021. 05. 10
+	 */
+	public int getWithdrawDirectiveListCount(Withdraw withdraw) {
+		return withdrawDao.getWithdrawDirectiveListCount(withdraw);
+	}
+	
+	/**
+	 * 회수지시 목록 
+	 *
+	 * @param Withdraw
+	 * @return
+	 * @author moon 
+	 * @since 2021. 05. 10
+	 */
+	public Collection<Withdraw> getWithdrawDirectiveList(Withdraw withdraw) {
+		return withdrawDao.getWithdrawDirectiveList(withdraw);
+	}
+	
+	/**
+	 * 재회수지시
+	 *
+	 * @param Withdraw
+	 * @return void
+	 * @author moon
+	 * @since 2021. 05. 11
+	 */
+	@Transactional("shopTxnManager")
+	public void reRecallOrder(Withdraw withdraw) {
+		Integer userNo = TsaSession.getInfo().getUserNo();
+		withdraw.setUpdNo(userNo);
+		if(OrderChangeGb.RETURN.value().equals(withdraw.getChgGb())) { // 반품요청
+			withdraw.setChgStat(OrderChangeStat.RETURN.value()); // 반품접수
+		} else { //교환요청
+			withdraw.setChgStat(OrderChangeStat.EXCHANGE.value()); // 교환접수 
+		}
+		withdrawDao.updateReRecallOrder(withdraw);
+		
+		// 주문상세변경 이력 
+		OrderChange ordChg = new OrderChange();
+		ordChg.setRegNo(userNo);
+		ordChg.setUpdNo(userNo);
+		ordChg.setOrdChgSq(withdraw.getOrdChgSq()); 
+		ordChg.setOrdDtlNo(withdraw.getOrdDtlNo()); 
+		ordChg.setChgStat(withdraw.getChgStat());
+		orderChangeDao.createOrderChangeDetailHst(ordChg);
+		
+	}
+	
+	
+	
+	
 	/**
 	 * 회수등록 - 조회(송장번호용)
 	 *

+ 141 - 173
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -48,11 +48,10 @@ import com.style24.persistence.domain.CouponLimitedTime;
 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.MailHeaderFooter;
 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.MailTemplateCorner;
+import com.style24.persistence.domain.MailTemplateGoods;
 import com.style24.persistence.domain.MoreBetter;
 import com.style24.persistence.domain.MoreBetterBurden;
 import com.style24.persistence.domain.MoreBetterGoods;
@@ -1091,51 +1090,48 @@ public class TsaMarketingController extends TsaBaseController {
 	}
 
 	/* 최수환 진행 */
-
 	/**
-	 * 메일 헤더푸터관리 화면
-	 * @param
+	 * 메일헤더푸터관리 화면
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 01
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	@GetMapping("/mailtemplate/form")
-	public ModelAndView mailheaderfooterForm() {
-		ModelAndView mav = new ModelAndView();
-
-		mav.setViewName("marketing/MailHeaderFooterForm");
+	@GetMapping("/mail/headerfooter/form")
+	public ModelAndView mailHeaderFooterForm() {
+		ModelAndView mav = new ModelAndView("marketing/MailHeaderFooterForm");
 		return mav;
 	}
 
 	/**
-	 * 메일헤더푸터관리 목록
-	 * @param 메일헤더푸터관리 - 메일 헤더푸터 정보
+	 * 메일헤더푸터 목록
+	 * @param mailhf - 메일헤더푸터 정보
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 01
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	@PostMapping("/mailtemplate/list")
+	@PostMapping("/mail/headerfooter/list")
 	@ResponseBody
-	public Collection<MailTemplate> getMailHFList(@RequestBody MailTemplate mailTemplate) {
-		return mailTemplateService.getmailHFList(mailTemplate);
+	public Collection<MailHeaderFooter> getMailHeaderFooterList(@RequestBody MailHeaderFooter mailhf) {
+		return mailTemplateService.getMailHeaderFooterList(mailhf);
 	}
 
 	/**
-	 * 메일헤더푸터관리 상세화면
+	 * 메일헤더푸터 상세 화면
 	 * @param mode - 모드(N:신규, U:상세)
+	 * @param mailhfSq - 메일헤더푸터일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 01
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	@GetMapping("/mailtemplate/detail/form")
-	public ModelAndView MailHeadeFooterDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "mailhfSq", required = false) Integer mailhfSq) {
+	@GetMapping("/mail/headerfooter/detail/form")
+	public ModelAndView mailHeadeFooterDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "mailhfSq", required = false) Integer mailhfSq) {
 		ModelAndView mav = new ModelAndView();
 
 		// 모드 값
 		mav.addObject("mode", mode);
 
 		if ("U".equals(mode)) {
-			mav.addObject("mailhfInfo", mailTemplateService.getMailHFDetail(mailhfSq));
+			mav.addObject("mailhfInfo", mailTemplateService.getMailHeaderFooter(mailhfSq));
 		}
 
 		mav.setViewName("marketing/MailHeaderFooterDetailForm");
@@ -1144,69 +1140,95 @@ public class TsaMarketingController extends TsaBaseController {
 	}
 
 	/**
-	 * 메일헤더푸터 상세 등록/수정
-	 * @param 메일헤더푸터관리 - 메일헤더푸터 정보
+	 * 메일헤더푸터 저장 처리
+	 * @param mailhf - 메일헤더푸터 정보
 	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 01
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	@PostMapping("/mailtemplate/save")
+	@PostMapping("/mail/headerfooter/save")
 	@ResponseBody
-	public GagaResponse saveMailHF(@RequestBody MailTemplate mailTemplate) {
-		mailTemplate.setRegNo(TsaSession.getInfo().getUserNo());
-		mailTemplate.setUpdNo(TsaSession.getInfo().getUserNo());
-		mailTemplateService.saveMailHF(mailTemplate);
+	public GagaResponse saveMailHeaderFooter(@RequestBody MailHeaderFooter mailhf) {
+		mailTemplateService.saveMailHeaderFooter(mailhf);
 		return super.ok(message.getMessage("SUCC_0001"));
+	}
 
+	/**
+	 * 메일헤더푸터 삭제
+	 * @param mailhfSq - 메일헤더푸더일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 13
+	 */
+	@PostMapping("/mail/headerfooter/delete/{mailhfSq}")
+	@ResponseBody
+	public GagaResponse deleteMailHeaderFooterList(@PathVariable Integer mailhfSq) {
+		mailTemplateService.deleteMailHeaderFooter(mailhfSq);
+		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * 메일헤더푸터 리스트 삭제
-	 * @param 메일헤더푸터관리 - 메일헤더푸더 정보
+	 * 메일헤더푸터 목록 삭제
+	 * @param mailhfList - 메일헤더푸더 목록
 	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 03
+	 * @author gagamel
+	 * @since 2021. 5. 13
 	 */
-	@PostMapping("/mailtemplate/delete")
+	@PostMapping("/mail/headerfooter/list/delete")
 	@ResponseBody
-	public GagaResponse deleteMailHFList(@RequestBody Collection<MailTemplate> mailTemplateList) {
-		mailTemplateService.deleteMailHFList(mailTemplateList);
+	public GagaResponse deleteMailHeaderFooterList(@RequestBody Collection<MailHeaderFooter> mailhfList) {
+		if (mailhfList == null || mailhfList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		mailTemplateService.deleteMailHeaderFooterList(mailhfList);
+
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * MKT 메일관리 화면
+	 * 메일템플릿관리 화면
 	 * @param
 	 * @return
 	 * @author csh9191
 	 * @since 2021. 02. 05
 	 */
-	@GetMapping("/mktmailmanagement/form")
-	public ModelAndView mktmailManagementForm() {
-		ModelAndView mav = new ModelAndView();
-
-		mav.setViewName("marketing/MktmailmanagementForm");
+	@GetMapping("/mailtemplate/form")
+	public ModelAndView mailTemplateForm() {
+		ModelAndView mav = new ModelAndView("marketing/MailTemplateForm");
 		return mav;
 	}
 
 	/**
-	 * MKT 메일관리 상세화면
-	 * @param mode - 모드(N:신규, U:상세)
+	 * 메일템플릿 목록
+	 * @param mailTemplate - 메일템플릿 정보
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 08
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	@GetMapping("/mktmailmanagement/detail/form")
-	public ModelAndView mktmailManagementDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "mailtSq", required = false) Integer mailtSq, @RequestParam(value = "mailtcSq", required = false) Integer mailtcSq) {
+	@PostMapping("/mailtemplate/list")
+	@ResponseBody
+	public Collection<MailTemplate> getMailTemplateList(@RequestBody MailTemplate mailTemplate) {
+		return mailTemplateService.getMailTemplateList(mailTemplate);
+	}
 
-		ModelAndView mav = new ModelAndView();
-		MailTemplate param = new MailTemplate();
+	/**
+	 * 메일템플릿 상세 화면
+	 * @param mode - 모드(N:신규, U:상세)
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	@GetMapping("/mailtemplate/detail/form")
+	public ModelAndView mailTemplateDetailForm(@RequestParam(value = "mode") String mode, @RequestParam(value = "mailtSq", required = false) Integer mailtSq) {
+		ModelAndView mav = new ModelAndView("marketing/MailTemplateDetailForm");
 
-		param.setMailhfGb("H");
-		mav.addObject("mailHsqList", mailTemplateService.getmailHFList(param));
+		// 메일헤더 목록
+		mav.addObject("mhList", mailTemplateService.getMailHeaderFooterComboList("H"));
 
-		param.setMailhfGb("F");
-		mav.addObject("mailFsqList", mailTemplateService.getmailHFList(param));
+		// 메일푸터 목록
+		mav.addObject("mfList", mailTemplateService.getMailHeaderFooterComboList("F"));
 
 		// 판매상태
 		String[] mailCds = {"G008_00"};
@@ -1215,161 +1237,107 @@ public class TsaMarketingController extends TsaBaseController {
 		mav.addObject("mode", mode);
 
 		if ("U".equals(mode)) {
-
-			mav.addObject("mktmailInfo", mailTemplateService.getMktmailManagementDetail(mailtSq));
-
-			Collection<GagaMap> mapList = new ArrayList();
-			Collection<MktmailManagementTc> tcList = mailTemplateService.getMktmailManagementTCList(mailtSq);
-			log.info("tcList {}", tcList);
-			for (MktmailManagementTc tmp : tcList) {
-				Collection<MktmailManagementGoods> goodsList = mailTemplateService.getMktmailManagementGoodsList(tmp.getMailtcSq());
-
-				GagaMap map = new GagaMap();
-				map.set("goodsList", goodsList);
-				map.set("tc", tmp);
-
-				mapList.add(map);
-			}
-
-			mav.addObject("mktmailTCInfo", mapList);
+			// 메일템플릿 정보
+			MailTemplate mtInfo = mailTemplateService.getMailTemplate(mailtSq);
+			mav.addObject("mtInfo", mtInfo);
 		}
 
-		mav.setViewName("marketing/MktmailmanagementDetailForm");
-
 		return mav;
 	}
 
 	/**
-	 * MKT 메일관리 상품추가 팝업
-	 * @param 
+	 * 메일템플릿코너 목록
+	 * @param mailtSq - 메일템플릿일련번호
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 09
+	 * @author gagamel
+	 * @since 2021. 5. 12
 	 */
-
-	@PostMapping("/mktMailManagement/goods/info")
+	@GetMapping("/mailtemplate/corner/list/{mailtSq}")
 	@ResponseBody
-	public Collection<Goods> getMailGoodsInfo(@RequestBody String[] arrGoodsCd) {
-		Goods goods = new Goods();
-		goods.setArrGoodsCd(arrGoodsCd);
-
-		return mailTemplateService.getMailGoodsInfo(goods);
+	public Collection<MailTemplateCorner> getMailTemplateCornerList(@PathVariable Integer mailtSq) {
+		return mailTemplateService.getMailTemplateCornerList(mailtSq);
 	}
 
 	/**
-	 * MKT메일 상세 등록/수정
-	 * @param 메일헤더푸터관리 - 메일헤더푸터 정보
+	 * 메일템플릿 저장 처리
+	 * @param mailTemplate - 메일템플릿 정보
 	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 13
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	@PostMapping("/mktMailManagement/save")
+	@PostMapping("/mailtemplate/save")
 	@ResponseBody
-	public GagaMap saveMktMailTemplate(@RequestBody MktmailManagement mktMailManagement) {
-		GagaMap result = new GagaMap();
-
-		result.set("status", GagaResponseStatus.FAIL.getCode());
-		log.info("mailtSq {}", mktMailManagement.getMailtSq());
-		result = mailTemplateService.saveMktMailTemplate(mktMailManagement);
-
-		result.set("message", message.getMessage("SUCC_0001"));
-		return result;
+	public GagaResponse saveMailTemplate(@RequestBody MailTemplate mailTemplate) {
+		mailTemplateService.saveMailTemplate(mailTemplate);
+		return super.ok(message.getMessage("SUCC_0001"));
 	}
 
 	/**
-	 * MKT메일관리 목록
-	 * @param MKT메일관리관리 - MKT메일관리 정보
+	 * 메일템플릿 목록 삭제
+	 * @param mailTemplateList - 메일템플릿 목록
 	 * @return
-	 * @author csh9191
-	 * @since 2021. 02. 14
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	@PostMapping("/mktmailManagement/list")
+	@PostMapping("/mailtemplate/list/delete")
 	@ResponseBody
-	public Collection<MktmailManagement> getMktMailList(@RequestBody MktmailManagement mktmailManagement) {
-		return mailTemplateService.getMktMailList(mktmailManagement);
+	public GagaResponse deleteMailTemplateList(@RequestBody Collection<MailTemplate> mailTemplateList) {
+		if (mailTemplateList == null || mailTemplateList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		mailTemplateService.deleteMailTemplateList(mailTemplateList);
+
+		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * MKT메일관리 목록 삭제
-	 * @param 
+	 * 메일템플릿코너 삭제
+	 * @param mailtcSq - 메일템플릿코너일련번호
 	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 15
+	 * @author gagamel
+	 * @since 2021. 5. 12
 	 */
-	@PostMapping("/mktmailManagement/delete")
+	@PostMapping("/mailtemplate/corner/delete/{mailtcSq}")
 	@ResponseBody
-	public GagaResponse deleteMktmailList(@RequestBody Collection<MktmailManagement> mktmailManagementList) {
-		mailTemplateService.deleteMktmailList(mktmailManagementList);
+	public GagaResponse deleteMktCorner(@PathVariable Integer mailtcSq) {
+		mailTemplateService.deleteMailTemplateCorner(mailtcSq);
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * MKT메일관리 코너(구분) 삭제
-	 * @param 
+	 * 메일템플릿코너상품 목록 삭제
+	 * @param mtcgList - 메일템플릿코너상품 목록
 	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 22
+	 * @author gagamel
+	 * @since 2021. 5. 12
 	 */
-	@PostMapping("/mktmailManagement/corner/delete")
+	@PostMapping("/mailtemplate/goods/list/delete")
 	@ResponseBody
-	public GagaMap deleteMktCorner(@RequestBody Collection<MktmailManagementTc> mktmailManagementTcList) {
-		GagaMap result = new GagaMap();
-		mailTemplateService.deleteMktCorner(mktmailManagementTcList);
-		result.set("status", GagaResponseStatus.SUCCESS.getCode());
-		return result;
+	public GagaResponse deleteMailTemplateCornerGoodsList(@RequestBody Collection<MailTemplateGoods> mtcgList) {
+		if (mtcgList == null || mtcgList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
 
-	}
+		mailTemplateService.deleteMailTemplateCornerGoodsList(mtcgList);
 
-	/**
-	 * MKT메일관리 상품 삭제
-	 * @param 
-	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 22
-	 */
-	@PostMapping("/mktmailManagement/goods/delete")
-	@ResponseBody
-	public GagaResponse deleteMktGoods(@RequestBody Collection<MktmailManagementGoods> mktmailManagementGoodsList) {
-		mailTemplateService.deleteMktGoodsList(mktmailManagementGoodsList);
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
 
 	/**
-	 * MKT메일관리 미리보기
-	 * @param 
+	 * 메일템플릿관리 - 메일미리보기
+	 * @param mailtSq - 메일템플릿일련번호
 	 * @return
-	 * @author csh9191	
-	 * @since 2021. 02. 19
+	 * @author gagamel
+	 * @since 2021. 5. 11
 	 */
-	@GetMapping("/mktmailmanagement/preview")
+	@GetMapping("/mailtemplate/preview/form/{mailtSq}")
 	@ResponseBody
-	public ModelAndView MktmailmanagementPreview(@RequestParam(value = "mailtSq", required = false) Integer mailtSq) {
-
-		ModelAndView mav = new ModelAndView();
-
-		//헤더
-		mav.addObject("mktmailPreviewHeader", mailTemplateService.getMktmailPreviewHeader(mailtSq));
-		//푸터
-		mav.addObject("mktmailPreviewFooter", mailTemplateService.getMktmailPreviewFooter(mailtSq));
-		//내용
-		mav.addObject("mktmailPreviewContent", mailTemplateService.getMktmailPreviewContent(mailtSq));
-
-		Collection<GagaMap> mapList = new ArrayList();
-		Collection<MktmailManagementTc> tcList = mailTemplateService.getMktmailManagementTCList(mailtSq);
+	public ModelAndView mailTemplatePreviewForm(@PathVariable Integer mailtSq) {
+		ModelAndView mav = new ModelAndView("marketing/MailTemplatePreviewForm");
 
-		for (MktmailManagementTc tmp : tcList) {
-			Collection<MktmailManagementGoods> goodsList = mailTemplateService.getMktmailPreviewGoodsList(tmp.getMailtcSq());
-
-			GagaMap map = new GagaMap();
-			map.set("goodsList", goodsList);
-			map.set("tc", tmp);
-
-			mapList.add(map);
-		}
-
-		mav.addObject("mktmailPreviewGoods", mapList);
-
-		mav.setViewName("marketing/MktmailmanagementPreviewForm");
+		// 메일템플릿 미리보기 정보
+		mav.addObject("previewInfo", mailTemplateService.getMailTemplatePreview(mailtSq));
 
 		return mav;
 	}
@@ -2319,7 +2287,7 @@ public class TsaMarketingController extends TsaBaseController {
 		pollService.createPoll(params);
 		return super.ok(message.getMessage("SUCC_0001"));
 	}
-	
+
 	/**
 	 * POLL 단일문항 삭제
 	 *

+ 70 - 0
src/main/java/com/style24/admin/biz/web/TsaWithdrawController.java

@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import com.gagaframework.web.parameter.GagaMap;
 import com.gagaframework.web.rest.server.GagaResponse;
 import com.style24.persistence.TscPageRequest;
+import com.style24.persistence.domain.CommonCode;
 import com.style24.persistence.domain.Delivery;
 import com.style24.persistence.domain.Pos;
 import com.style24.persistence.domain.Withdraw;
@@ -220,6 +221,75 @@ public class TsaWithdrawController extends TsaBaseController {
 	}	
 	
 	
+	/**
+	 * 회수지시목록 화면 
+	 *
+	 * @param
+	 * @return
+	 * @throws Exception
+	 * @author moon
+	 * @since 2021. 05. 10
+	 */
+	@GetMapping("/directive/form")
+	@ResponseBody
+	public ModelAndView withdrawDirectiveListForm() throws Exception {
+		ModelAndView mav = new ModelAndView();
+
+		mav.addObject("wdShipStateList", rendererService.getAvailCommonCodeList("G320"));
+
+		mav.setViewName("/withdraw/WithdrawDirectiveListForm");
+
+		return mav;
+	}
+	
+	/**
+	 *회수목록 조회 
+	 * 
+	 * @param
+	 * @return
+	 * @throws Exception
+	 * @author moon
+	 * @since 2021. 05. 10
+	 */
+	@PostMapping("/direct/list")
+	@ResponseBody
+	public GagaMap withdrawDirectiveList(@RequestBody Withdraw withdraw) throws Exception {
+		
+		GagaMap result = new GagaMap();
+		withdraw.setPageable(new TscPageRequest(withdraw.getPageNo() - 1, withdraw.getPageSize()));
+		
+		withdraw.getPageable().setTotalCount(withdrawService.getWithdrawDirectiveListCount(withdraw));
+		
+		if ("N".equals(withdraw.getPageingYn())) {
+			withdraw.setPageable(null);
+		}
+		result.set("pageing", withdraw);
+		log.info("withdraw {}"+withdraw);
+		Collection<Withdraw> list = withdrawService.getWithdrawDirectiveList(withdraw);
+		
+		result.set("directList", list);
+		
+
+		return result;
+	}	
+	
+	/**
+	 * 출고처지정 취소 
+	 *
+	 * @param
+	 * @return
+	 * @throws Exception
+	 * @author moon
+	 * @since 2020. 04. 20
+	 */
+	@PostMapping("/direct/recallorder")
+	@ResponseBody
+	public GagaResponse reRecallOrder(@RequestBody Withdraw param) throws Exception {
+		withdrawService.reRecallOrder(param);
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
+	
+	
 	
 	/**
 	 * 회수등록 화면

+ 23 - 0
src/main/java/com/style24/persistence/domain/MailHeaderFooter.java

@@ -0,0 +1,23 @@
+package com.style24.persistence.domain;
+
+import com.style24.persistence.TscBaseDomain;
+
+import lombok.Data;
+
+/**
+ * 메일헤더푸터 Domain
+ *
+ * @author gagamel
+ * @since 2021. 5. 13
+ */
+@SuppressWarnings("serial")
+@Data
+public class MailHeaderFooter extends TscBaseDomain {
+
+	private Integer mailhfSq;		// 메일헤더푸터일련번호
+	private String mailhfNm;		// 메일헤더푸터명
+	private String mailhfGb;		// 메일헤더푸터구분
+	private String mailhfContent;	// 메일헤더푸터내용
+	private String useYn;			// 사용여부
+
+}

+ 0 - 83
src/main/java/com/style24/persistence/domain/MktmailManagement.java

@@ -1,83 +0,0 @@
-package com.style24.persistence.domain;
-
-import java.util.List;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * MKT메일관리 Domain
- *
- * @author csh9191
- * @since 2021. 02. 05
- */
-@SuppressWarnings("serial")
-@Data
-public class MktmailManagement extends TscBaseDomain{
-	// MKT 메일관리
-	private String mktmailStdt;				// 검색 시작일
-	private String mktmailEddt;				// 검색 마지막일
-	private Integer mailtSq; 				// 메일템플릿 번호
-	private String mailtNm;					// 메일템플릿 명
-	private String mailtGb;					// 메일템플릿 구분
-	private Integer mailHsq;
-	private Integer mailFsq;	
-	private Integer mktHeader;				// 메일헤더 일련번호
-	private Integer mktFooter;				// 메일푸터 일련번호
-	private String mailContent;				// 메일 내용
-	private String useYn;					// 사용구분
-	private String regDt;					// 등록일시
-	private String updDt;					// 수정일시
-	private String mode;
-	
-	private String searchTxt;				// 검색어
-	private String searchGb; 				// 검색구분
-		
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementGoods> mktmailManagementGoods; //메일 전시
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementGoods> mktmailManagementGoods2; //메일 전시
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementGoods> mktmailManagementGoods3; //메일 전시
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementGoods> mktmailManagementGoods4; //메일 전시
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementGoods> mktmailManagementGoods5; //메일 전시
-	
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementTc> mktmailManagementTc; //메일템플릿 구분자
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementTc> mktmailManagementTc2; 
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementTc> mktmailManagementTc3; 
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementTc> mktmailManagementTc4; 
-	@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
-	List<MktmailManagementTc> mktmailManagementTc5; 
-	
-	// 메일 템플릿 코너 
-	private Integer mailtcSq;				// 메일템플릿 코너번호
-	private String mailtcNm;				// 메일템플릿 코너명
-	private Integer goodsCpr;				// 상품 노출건수
-	private String mailtcLink;				// 메일템플릿 코너 링크
-	
-	//상품정보
-	private String brandEnm;				// 브랜드명
-	private String goodsNm;					// 상품명
-	private String goodsStat;				// 판매상태
-	private String listPrice;				// 정상가
-	private String currPrice;				// 판매가
-	private String goodsCd;					// 상품코드(상품)
-	private Integer dispOrd;				// 표시순서
-	
-	//미리보기
-	private String mailhfContent;			//메잃 헤더 푸터 정보
-	
-
-
-	
-
-	
-}

+ 0 - 33
src/main/java/com/style24/persistence/domain/MktmailManagementGoods.java

@@ -1,33 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * MKT메일관리 Domain
- *
- * @author csh9191
- * @since 2021. 02. 05
- */
-@SuppressWarnings("serial")
-@Data
-public class MktmailManagementGoods extends TscBaseDomain{
-	
-	// 메일 템플릿 코너 상품
-	private Integer mailtcSq;				// 메일템플릿코너 일련번호
-	private Integer mailtSq;				// 메일템플릿 일련번호
-	private String goodsCd;					// 상품코드(상품)
-	private Integer dispOrd;				// 표시순서
-	private String regDt;					// 등록일시
-	private String updDt;					// 수정일시
-	
-	//상품정보
-	private String brandEnm;				// 브랜드명
-	private String goodsNm;					// 상품명
-	private String goodsStat;				// 판매상태
-	private String listPrice;				// 정상가
-	private String currPrice;				// 판매가
-	private String sysImgNm;				// 이미지정보
-
-}

+ 0 - 29
src/main/java/com/style24/persistence/domain/MktmailManagementTc.java

@@ -1,29 +0,0 @@
-package com.style24.persistence.domain;
-
-import com.style24.persistence.TscBaseDomain;
-
-import lombok.Data;
-
-/**
- * MKT메일관리 Domain
- *
- * @author csh9191
- * @since 2021. 02. 05
- */
-@SuppressWarnings("serial")
-@Data
-public class MktmailManagementTc extends TscBaseDomain{
-	
-	// 메일 템플릿 코너 
-	private Integer mailtcSq;				// 메일템플릿 코너번호
-	private Integer mailtSq;				// 메일템플릿 일련번호
-	private String mailtcNm;				// 메일템플릿 코너명
-	private Integer goodsCpr;				// 상품 노출건수
-	private String mailtcLink;				// 메일템플릿 코너 링크
-	private String useYn;					// 사용구분
-	private String regDt;					// 등록일시
-	private String updDt;					// 수정일시
-
-
-
-}

+ 28 - 2
src/main/java/com/style24/persistence/domain/Withdraw.java

@@ -25,8 +25,9 @@ public class Withdraw extends TscBaseDomain {
 	private int pageUnit = 10;
 	private int rnum;
 	
+
 	
-	// 환불컨펌 
+	// 회수 
 
 	private String wdInvoiceNo; 
 	private String rfndStat; 
@@ -41,10 +42,32 @@ public class Withdraw extends TscBaseDomain {
 	private String goodsCd;
 	private String optCd1;
 	private String optCd2;
-
 	private String chgMemo;
 	private String chgReason;
 	private String completeDt;
+	private String chgGbNm;
+	private String chgReasonNm;
+	private String wdShipStateNm;
+	private String wdReasonCdNm;
+	private String chgStatNm; 
+	private String chgGb;                               // 변경구분 g680
+	private String wdShipState;                         // 배송업체회수상태 g320
+	private String wdStateDt;                           // 회수상태 수신일시 
+	private String wdReasonCd;                          // 미회수사유 g321 g322
+	private String wdBfSendYn;                          // 교환 선발송 여부 
+	private String sendYn;         					    // 전송여부
+	private String chgStat;                             // 변경상태 g685
+	private String goodsNm;                             // 상품명
+	private String wdStdt;  							// 배송시작일시
+	private String recipNm;        					  	// 수취인명
+	private String chgerNm;                             // 변경자명
+	private String chgerPhnno;                          // 변경자휴대전화번호
+	private String chgerTelno;                          // 변경자전화번호
+	private String chgerZipcode;                        // 변경자우편번호
+	private String chgerBaseAddr;                       // 변경자기본주소
+	private String chgerDtlAddr;                        // 변경자상세주소
+	private String ordTelno;                            // 주문자전화번호
+	private String ordEmail;                            // 주문자이메일	
 	
 	private Integer ordNo;
 	private Integer ordDtlNo; 
@@ -60,6 +83,9 @@ public class Withdraw extends TscBaseDomain {
 	
 	
 	
+								 
+	
+	
 	
 	/*
 	// 회수

+ 10 - 15
src/main/java/com/style24/persistence/mybatis/shop/TsaDelivery.xml

@@ -558,12 +558,11 @@
 						     , O.SITE_CD                                         -- 사이트코드
 						     , O.ORD_NO                                          -- 주문번호
 						     , OD.ORD_DTL_NO                                     -- 주문상세번호
-						     , IT.ITEM_CD AS GOODS_CD                            -- 상품코드
+						     , OD.GOODS_CD                                       -- 상품코드
 						FROM   TB_ORDER O
 						 JOIN  TB_ORDER_DETAIL OD      ON O.ORD_NO = OD.ORD_NO
 						 JOIN  TB_DELIVERY_ADDR DA     ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ AND OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
-						 JOIN  TB_ORDER_DETAIL_ITEM IT ON OD.ORD_NO       = IT.ORD_NO       AND OD.ORD_DTL_NO   = IT.ORD_DTL_NO
-						 JOIN  TB_GOODS G              ON IT.ITEM_CD      = G.GOODS_CD
+						 JOIN  TB_GOODS G              ON OD.GOODS_CD      = G.GOODS_CD
 						WHERE 1=1 
 						<if test="delvGb != null and delvGb != ''">
 						AND    'D' = #{delvGb} -- 배송지시
@@ -591,13 +590,12 @@
 						     , O.SITE_CD                                -- 사이트코드
 						     , O.ORD_NO                                 -- 주문번호
 						     , OCD.ORD_DTL_NO                           -- 주문상세번호
-						     , IT.ITEM_CD AS GOODS_CD                   -- 상품코드
+						     , OD.GOODS_CD                              -- 상품코드
 						FROM   TB_ORDER_CHANGE OC          
 						JOIN   TB_ORDER_CHANGE_DETAIL OCD ON OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
 						JOIN   TB_ORDER_DETAIL OD         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
 						JOIN   TB_ORDER O                 ON OD.ORD_NO      = O.ORD_NO
-						JOIN   TB_ORDER_DETAIL_ITEM IT    ON OD.ORD_NO      = IT.ORD_NO     AND OD.ORD_DTL_NO     = IT.ORD_DTL_NO
-						JOIN   TB_GOODS G                 ON IT.ITEM_CD     = G.GOODS_CD
+						JOIN   TB_GOODS G                 ON OD.GOODS_CD     = G.GOODS_CD
 						JOIN   TB_DELIVERY_LOC D          ON OD.DELV_LOC_CD = D.DELV_LOC_CD AND OD.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 						WHERE  1=1 
 						<if test="delvGb != null and delvGb != ''">
@@ -613,7 +611,7 @@
 						<if test="edDate != null and edDate != ''">
 						AND    OC.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s')
 						</if>
-						AND    OCD.CHG_STAT IN ('G685_30','G685_40') -- 반품요청,교환요청
+						AND    OCD.CHG_STAT IN ('G685_30','G685_31') -- 회수요청 상품검수중
 						<if test="siteCd != null and siteCd != ''">
 						AND    O.SITE_CD = #{siteCd}
 						</if>
@@ -638,12 +636,11 @@
 						     , O.SITE_CD                                         -- 사이트코드
 						     , O.ORD_NO                                          -- 주문번호
 						     , OD.ORD_DTL_NO                                     -- 주문상세번호
-						     , IT.ITEM_CD AS GOODS_CD                            -- 상품코드
+						     , OD.GOODS_CD                                       -- 상품코드
 						     , G.GOODS_NM                                        -- 상품명
 						     , DA.RECIP_NM                                       -- 수취인명
 						     , DA.RECIP_PHNNO                                    -- 수취인휴대전화번호
 						     , DA.RECIP_TELNO                                    -- 수취인전화번호
-						  --   , DA.RECIP_EMAIL                                    -- 수취인이메일
 						     , DA.RECIP_ZIPCODE                                  -- 수취인우편번호
 						     , DA.RECIP_BASE_ADDR                                -- 수취인기본주소
 						     , DA.RECIP_DTL_ADDR                                 -- 수취인상세주소
@@ -654,8 +651,7 @@
 						FROM   TB_ORDER O
 						 JOIN  TB_ORDER_DETAIL OD      ON O.ORD_NO = OD.ORD_NO
 						 JOIN  TB_DELIVERY_ADDR DA     ON OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ AND OD.DELV_ADDR_SQ = DA.DELV_ADDR_SQ
-						 JOIN  TB_ORDER_DETAIL_ITEM IT ON OD.ORD_NO       = IT.ORD_NO       AND OD.ORD_DTL_NO   = IT.ORD_DTL_NO
-						 JOIN  TB_GOODS G              ON IT.ITEM_CD      = G.GOODS_CD
+						 JOIN  TB_GOODS G              ON OD.GOODS_CD      = G.GOODS_CD
 						WHERE 1=1 
 						<if test="delvGb != null and delvGb != ''">
 						AND    'D' = #{delvGb} -- 배송지시
@@ -683,7 +679,7 @@
 						     , O.SITE_CD                                -- 사이트코드
 						     , O.ORD_NO                                 -- 주문번호
 						     , OCD.ORD_DTL_NO                           -- 주문상세번호
-						     , IT.ITEM_CD AS GOODS_CD                   -- 상품코드
+						     , OD.GOODS_CD                              -- 상품코드
 						     , G.GOODS_NM                               -- 상품명
 						     , D.RTN_LOC_NM          AS RECIP_NM        -- 수취인명
 						     , NULL                  AS RECIP_PHNNO     -- 수취인휴대전화번호
@@ -699,8 +695,7 @@
 						JOIN   TB_ORDER_CHANGE_DETAIL OCD ON OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
 						JOIN   TB_ORDER_DETAIL OD         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
 						JOIN   TB_ORDER O                 ON OD.ORD_NO      = O.ORD_NO
-						JOIN   TB_ORDER_DETAIL_ITEM IT    ON OD.ORD_NO      = IT.ORD_NO     AND OD.ORD_DTL_NO     = IT.ORD_DTL_NO
-						JOIN   TB_GOODS G                 ON IT.ITEM_CD     = G.GOODS_CD
+						JOIN   TB_GOODS G                 ON OD.GOODS_CD     = G.GOODS_CD
 						JOIN   TB_DELIVERY_LOC D          ON OD.DELV_LOC_CD = D.DELV_LOC_CD AND OD.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
 						WHERE  1=1 
 						<if test="delvGb != null and delvGb != ''">
@@ -716,7 +711,7 @@
 						<if test="edDate != null and edDate != ''">
 						AND    OC.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s')
 						</if>
-						AND    OCD.CHG_STAT IN ('G685_30','G685_40') -- 반품요청,교환요청
+						AND    OCD.CHG_STAT IN ('G685_30','G685_31') -- 회수요청 상품검수중
 						<if test="siteCd != null and siteCd != ''">
 						AND    O.SITE_CD = #{siteCd}
 						</if>

+ 55 - 54
src/main/java/com/style24/persistence/mybatis/shop/TsaDsiplay.xml

@@ -1759,63 +1759,64 @@
 
 	<!-- 메인전시 컨텐츠 탭영역 미리보기 리스트 -->
 	<select id="getContentsTabPreviewList" parameterType="Contents" resultType="Contents">
-		/* TsaDisplay.saveContentsGoods */
+		/* TsaDisplay.getContentsTabPreviewList */
 		SELECT 	STR_TITLE3
-				, DISP_STDT
-				, DISP_EDDT
-				, MAX(GROUP1_TITLE) AS GROUP1_TITLE
-				, MAX(GROUP1_BRAND_CD) AS GROUP1_BRAND_CD
-				, MAX(GROUP1_BRAND_NM) AS GROUP1_BRAND_NM
-				, MAX(GROUP1_BRAND_IMG) AS GROUP1_BRAND_IMG
-				, MAX(GROUP2_TITLE) AS GROUP2_TITLE
-				, MAX(GROUP2_BRAND_CD) AS GROUP2_BRAND_CD
-				, MAX(GROUP2_BRAND_NM) AS GROUP2_BRAND_NM
-				, MAX(GROUP2_BRAND_IMG) AS GROUP2_BRAND_IMG
-				, MAX(GROUP3_TITLE) AS GROUP3_TITLE
-				, MAX(GROUP3_BRAND_CD) AS GROUP3_BRAND_CD
-				, MAX(GROUP3_BRAND_NM) AS GROUP3_BRAND_NM
-				, MAX(GROUP3_BRAND_IMG) AS GROUP3_BRAND_IMG
+		      , DISP_STDT
+		      , DISP_EDDT
+		      , MAX(GROUP1_TITLE) AS GROUP1_TITLE
+		      , MAX(GROUP1_BRAND_CD) AS GROUP1_BRAND_CD
+		      , MAX(GROUP1_BRAND_NM) AS GROUP1_BRAND_NM
+		      , MAX(GROUP1_BRAND_IMG) AS GROUP1_BRAND_IMG
+		      , MAX(GROUP2_TITLE) AS GROUP2_TITLE
+		      , MAX(GROUP2_BRAND_CD) AS GROUP2_BRAND_CD
+		      , MAX(GROUP2_BRAND_NM) AS GROUP2_BRAND_NM
+		      , MAX(GROUP2_BRAND_IMG) AS GROUP2_BRAND_IMG
+		      , MAX(GROUP3_TITLE) AS GROUP3_TITLE
+		      , MAX(GROUP3_BRAND_CD) AS GROUP3_BRAND_CD
+		      , MAX(GROUP3_BRAND_NM) AS GROUP3_BRAND_NM
+		      , MAX(GROUP3_BRAND_IMG) AS GROUP3_BRAND_IMG
 		FROM (
-				SELECT  STR_TITLE3
-					, DISP_STDT
-					, DISP_EDDT
-					, CASE WHEN STR_TITLE2 = 1 THEN TITLE END AS GROUP1_TITLE
-					, CASE WHEN STR_TITLE2 = 1 THEN GROUP_CONCAT(BRAND_GROUP_NO SEPARATOR ',') END GROUP1_BRAND_CD
-					, CASE WHEN STR_TITLE2 = 1 THEN GROUP_CONCAT(BRAND_GROUP_NM SEPARATOR ',') END GROUP1_BRAND_NM
-					, CASE WHEN STR_TITLE2 = 1 THEN GROUP_CONCAT(LOGO_FILE_NM SEPARATOR ',') END GROUP1_BRAND_IMG
-					, CASE WHEN STR_TITLE2 = 2 THEN TITLE END AS GROUP2_TITLE
-					, CASE WHEN STR_TITLE2 = 2 THEN GROUP_CONCAT(BRAND_GROUP_NO SEPARATOR ',') END GROUP2_BRAND_CD
-					, CASE WHEN STR_TITLE2 = 2 THEN GROUP_CONCAT(BRAND_GROUP_NM SEPARATOR ',') END GROUP2_BRAND_NM
-					, CASE WHEN STR_TITLE2 = 2 THEN GROUP_CONCAT(LOGO_FILE_NM SEPARATOR ',') END GROUP2_BRAND_IMG
-					, CASE WHEN STR_TITLE2 = 3 THEN TITLE END AS GROUP3_TITLE
-					, CASE WHEN STR_TITLE2 = 3 THEN GROUP_CONCAT(BRAND_GROUP_NO SEPARATOR ',') END GROUP3_BRAND_CD
-					, CASE WHEN STR_TITLE2 = 3 THEN GROUP_CONCAT(BRAND_GROUP_NM SEPARATOR ',') END GROUP3_BRAND_NM
-					, CASE WHEN STR_TITLE2 = 3 THEN GROUP_CONCAT(LOGO_FILE_NM SEPARATOR ',') END GROUP3_BRAND_IMG
-				FROM (
-					SELECT
-							B.STR_TITLE3
-							, B.STR_TITLE2
-							, B.DISP_STDT
-							, B.DISP_EDDT
-							, B.STR_TITLE1     AS TITLE
-							, A.BRAND_GROUP_NO
-							, CASE WHEN A.DISP_NM_LANG = 'EN' THEN A.BRAND_GROUP_ENM
-							ELSE A.BRAND_GROUP_KNM
-							END              AS BRAND_GROUP_NM
-							, A.LOGO_FILE_NM
-							, B.DISP_ORD
-					FROM   TB_BRAND_GROUP A
-						, TB_CONTENTS_PREVIEW B
-					WHERE  A.BRAND_GROUP_NO = B.STR_VAR1
-					AND    A.USE_YN = 'Y'
-					AND	   B.CATE_NO = #{cateNo}
-					AND    B.CONTENTS_LOC = #{contentsLoc}
-					AND    B.DISP_STDT <![CDATA[<=]]> NOW()
-					AND    B.DISP_EDDT <![CDATA[>=]]> NOW()
-					ORDER  BY B.DISP_ORD, B.CONTENTS_SQ
-				) T
-			GROUP BY STR_TITLE2
+		        SELECT  STR_TITLE3
+		              , DISP_STDT
+		              , DISP_EDDT
+		              , CASE WHEN STR_TITLE2 = 1 THEN TITLE END AS GROUP1_TITLE
+		              , CASE WHEN STR_TITLE2 = 1 THEN GROUP_CONCAT(BRAND_GROUP_NO SEPARATOR ',') END GROUP1_BRAND_CD
+		              , CASE WHEN STR_TITLE2 = 1 THEN GROUP_CONCAT(BRAND_GROUP_NM SEPARATOR ',') END GROUP1_BRAND_NM
+		              , CASE WHEN STR_TITLE2 = 1 THEN GROUP_CONCAT(LOGO_FILE_NM SEPARATOR ',') END GROUP1_BRAND_IMG
+		              , CASE WHEN STR_TITLE2 = 2 THEN TITLE END AS GROUP2_TITLE
+		              , CASE WHEN STR_TITLE2 = 2 THEN GROUP_CONCAT(BRAND_GROUP_NO SEPARATOR ',') END GROUP2_BRAND_CD
+		              , CASE WHEN STR_TITLE2 = 2 THEN GROUP_CONCAT(BRAND_GROUP_NM SEPARATOR ',') END GROUP2_BRAND_NM
+		              , CASE WHEN STR_TITLE2 = 2 THEN GROUP_CONCAT(LOGO_FILE_NM SEPARATOR ',') END GROUP2_BRAND_IMG
+		              , CASE WHEN STR_TITLE2 = 3 THEN TITLE END AS GROUP3_TITLE
+		              , CASE WHEN STR_TITLE2 = 3 THEN GROUP_CONCAT(BRAND_GROUP_NO SEPARATOR ',') END GROUP3_BRAND_CD
+		              , CASE WHEN STR_TITLE2 = 3 THEN GROUP_CONCAT(BRAND_GROUP_NM SEPARATOR ',') END GROUP3_BRAND_NM
+		              , CASE WHEN STR_TITLE2 = 3 THEN GROUP_CONCAT(LOGO_FILE_NM SEPARATOR ',') END GROUP3_BRAND_IMG
+		        FROM (
+		            SELECT
+		                  B.STR_TITLE3
+		                  , B.STR_TITLE2
+		                  , B.DISP_STDT
+		                  , B.DISP_EDDT
+		                  , B.STR_TITLE1     AS TITLE
+		                  , A.BRAND_GROUP_NO
+		                  , CASE WHEN A.DISP_NM_LANG = 'EN' THEN A.BRAND_GROUP_ENM
+		                  ELSE A.BRAND_GROUP_KNM
+		                  END              AS BRAND_GROUP_NM
+		                  , A.LOGO_FILE_NM
+		                  , B.DISP_ORD
+		            FROM   TB_BRAND_GROUP A
+		                 , TB_CONTENTS_PREVIEW B
+		            WHERE  A.BRAND_GROUP_NO = B.STR_VAR1
+		            AND    A.USE_YN = 'Y'
+		            AND	   B.CATE_NO = #{cateNo}
+		            AND    B.CONTENTS_LOC = #{contentsLoc}
+		            AND    B.DISP_STDT <![CDATA[<=]]> NOW()
+		            AND    B.DISP_EDDT <![CDATA[>=]]> NOW()
+		            ORDER  BY B.DISP_ORD, B.CONTENTS_SQ
+		        ) T
+		    GROUP BY  T.STR_TITLE3, T.DISP_STDT, T.DISP_EDDT , T.STR_TITLE2, T.TITLE
 		) Z
+		GROUP BY  Z.STR_TITLE3 , Z.DISP_STDT , Z.DISP_EDDT
 	</select>
 
 	<!-- 메인전시 GnbTab 미리보기 삭제 -->

+ 261 - 328
src/main/java/com/style24/persistence/mybatis/shop/TsaMailTemplate.xml

@@ -2,377 +2,310 @@
 <!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.TsaMailTemplateDao">
 
-		<select id="getmailHFList" parameterType="MailTemplate" resultType="MailTemplate">
-		/* TsaMailTemplate.getmailHFList 메일헤더푸터리스트*/
-		SELECT MAILHF_SQ                                             /*메일헤더푸터 일련번호*/
-		   	 , MAILHF_NM                                             /*메일헤더푸터 명*/
-		     , MAILHF_GB                                             /*메일 헤더푸터 구분 H:헤더 F:푸터*/
-		     , MAILHF_CONTENT                                        /*메일 헤더푸터 내용*/
-		     , USE_YN                                                /*사용여부*/
+	<!-- 메일헤더푸터 목록 -->
+	<select id="getMailHeaderFooterList" parameterType="MailHeaderFooter" resultType="MailHeaderFooter">
+		/* TsaMailTemplate.getMailHeaderFooterList */
+		SELECT MAILHF_SQ                                    /*메일헤더푸터일련번호*/
+		   	 , MAILHF_NM                                    /*메일헤더푸터명*/
+		     , MAILHF_GB                                    /*메일헤더푸터구분*/
+		     , MAILHF_CONTENT                               /*메일헤더푸터내용*/
+		     , USE_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(UPD_NO)             AS UPD_NM
 		     , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
 		FROM   TB_MAILHF
-		WHERE  USE_YN = 'Y'
-		<if test="mailhfNm != null and mailhfNm !='' ">
-		AND    LOWER(MAILHF_NM) LIKE CONCAT('%',LOWER(#{mailhfNm}),'%')
-		</if>
+		WHERE  1 = 1
 		<if test="mailhfGb !=null and mailhfGb !='' ">
 		AND    MAILHF_GB = #{mailhfGb}
-		</if> 
-		<if test="searchTxt !=null and searchTxt !='' ">
-		AND    FN_GET_USER_NM(REG_NO) LIKE CONCAT('%',LOWER(#{searchTxt}), '%')
 		</if>
-		ORDER  BY MAILHF_SQ DESC
-		</select>
+		<if test="mailhfNm != null and mailhfNm !='' ">
+		AND    LOWER(MAILHF_NM) LIKE CONCAT('%',LOWER(#{mailhfNm}),'%')
+		</if>
+		ORDER  BY MAILHF_SQ
+	</select>
 	
-		<insert id="saveMailHF" parameterType="MailTemplate">
-		/* TsaMailTemplate.saveMailHF 메일헤더푸터관리 등록/수정*/
+	<!-- 메일헤더푸터 조회 -->
+	<select id="getMailHeaderFooter" parameterType="Integer" resultType="MailHeaderFooter">
+		/* TsaMailTemplate.getMailHeaderFooter */
+		SELECT MAILHF_SQ      /*메일헤더푸터일련번호*/
+		     , MAILHF_NM      /*메일헤더푸터명*/
+		     , MAILHF_GB      /*메일헤더푸터구분*/
+		     , MAILHF_CONTENT /*메일헤더푸터내용*/
+		FROM   TB_MAILHF
+		WHERE  MAILHF_SQ = #{mailhfSq}
+	</select>
+	
+	<!-- 메일헤더푸터 저장 -->
+	<insert id="saveMailHeaderFooter" parameterType="MailHeaderFooter">
+		/* TsaMailTemplate.saveMailHeaderFooter */
 		INSERT INTO TB_MAILHF (
-			   MAILHF_SQ                                        /*메일헤더푸터 일련번호*/
-		     , MAILHF_NM                                        /*메일헤더푸터 명*/
-		     , MAILHF_GB                                        /*메일헤더푸터 구분 H:헤더 F:푸터*/
-		     , MAILHF_CONTENT                                   /* 메일헤더푸터 내용*/
-		     , USE_YN                                           /*사용여부*/
+		       MAILHF_SQ
+		     , MAILHF_NM
+		     , MAILHF_GB
+		     , MAILHF_CONTENT
+		     , USE_YN
 		     , REG_NO
 		     , REG_DT
 		     , UPD_NO
 		     , UPD_DT
 		)
-	     VALUES (
+		VALUES (
 		       #{mailhfSq}
 		     , #{mailhfNm}
 		     , #{mailhfGb}
 		     , #{mailhfContent}
-		     , IFNULL(#{useYn},'Y')
+		     , 'Y'
 		     , #{regNo}
 		     , NOW()
 		     , #{updNo}
 		     , NOW()
 		)
 		ON DUPLICATE KEY UPDATE
-		       MAILHF_SQ = #{mailhfSq}
-		     , MAILHF_NM = #{mailhfNm}
+		       MAILHF_NM = #{mailhfNm}
 		     , MAILHF_GB = #{mailhfGb}
 		     , MAILHF_CONTENT = #{mailhfContent}
 		     , UPD_NO = #{updNo}
 		     , UPD_DT = NOW()
-		</insert>
-	
-		<select id="getMailHFDetail" parameterType="Integer" resultType="MailTemplate">
-		/* TsaMailTemplate.getMailHFDetail 메일헤더푸터 상세화면 */
-		SELECT MAILHF_SQ
-		     , MAILHF_NM
-		     , MAILHF_GB
-		     , MAILHF_CONTENT
-		FROM   TB_MAILHF
-		WHERE  MAILHF_SQ = #{mailhfSq}
-		</select>
+	</insert>
 	
-		<update id='deleteMailHFList' parameterType='MailTemplate'>
-		/* TsaMailTemplate.deleteMailHFList 메일헤더푸터리스트삭제*/
+	<!-- 메일헤더푸터 삭제 -->
+	<update id='deleteMailHeaderFooter' parameterType='MailHeaderFooter'>
+		/* TsaMailTemplate.deleteMailHeaderFooter */
 		UPDATE TB_MAILHF
 		SET    USE_YN = 'N'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
 		WHERE  MAILHF_SQ = #{mailhfSq}
-		</update>
+	</update>
 	
-		<select id="getMailGoodsInfo" parameterType="Goods" resultType="Goods">
-		/*TsaMailTemplate.getMailGoodsInfo 메일 템플릿 상품 전시*/
-		SELECT GOODS_CD
-		     , BRAND_ENM 
-		     , GOODS_NM
-	         , GOODS_STAT
-	         , LIST_PRICE
-	         , CURR_PRICE
-		     , GROUP_CONCAT(OPT_CD2 ORDER BY DISP_ORD DESC, OPT_CD2 SEPARATOR ',')  AS SITE_CD
-	      FROM (
-		SELECT   GI.SYS_IMG_NM
-			   , G.GOODS_CD
-			   , G.GOODS_NM
-			   , B.BRAND_ENM 
-			   , (CASE WHEN G.GOODS_TYPE = 'G056_N' THEN (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK WHERE GOODS_CD = G.GOODS_CD)
-		   ELSE  (SELECT IFNULL(SUM(CURR_STOCK_QTY - BASE_STOCK_QTY),0) FROM VW_STOCK_COMPOSE WHERE GOODS_CD = G.GOODS_CD)
-				 END) AS STOCK_QTY_SUM
-			   , G.GOODS_STAT
-			   , G.STYLE_YEAR
-			   , G.SEASON_CD
-			   , G.LIST_PRICE
-			   , G.CURR_PRICE
-			   , G.PRICE_UPD_DT
-			   , G.ERP_STOCK_LINK_YN
-			   , G.FORMAL_GB
-			   , G.RETURNABLE_YN
-			   , G.REG_DT
-			   , FN_GET_USER_NM(G.REG_NO) AS REG_NM
-			   , G.UPD_DT
-			   , FN_GET_USER_NM(G.UPD_NO) AS UPD_NM
-			   , IFNULL(GC.COMPS_GOODS_CD, G.GOODS_CD) AS REP_GOODS_CD
-			   , OP.OPT_CD2
-			   , OP.DISP_ORD
-			FROM TB_GOODS G
-			LEFT OUTER JOIN TB_GOODS_COMPOSE GC
-			  ON G.GOODS_CD = GC.GOODS_CD
-		   INNER JOIN TB_OPTION OP
-			  ON IFNULL(GC.COMPS_GOODS_CD, G.GOODS_CD) = OP.GOODS_CD
-			LEFT OUTER JOIN TB_GOODS_IMG GI
-			  ON G.GOODS_CD = GI.GOODS_CD
-		   INNER JOIN TB_BRAND B
-			  ON G.BRAND_CD = B.BRAND_CD
-		   WHERE G.GOODS_CD IN
-		<foreach collection="arrGoodsCd" item="item" index="index"  open="(" close=")" separator=",">
-			 #{item}
-		</foreach>
-		  ) Z
-		    GROUP BY SYS_IMG_NM, GOODS_CD, GOODS_NM, STOCK_QTY_SUM, GOODS_STAT, STYLE_YEAR
-				   , SEASON_CD, LIST_PRICE, CURR_PRICE, PRICE_UPD_DT, ERP_STOCK_LINK_YN, FORMAL_GB, RETURNABLE_YN, REG_DT, REG_NM
-				   , UPD_DT, UPD_NM, REP_GOODS_CD
-		</select>
+	<!-- 메일템플릿 목록 -->
+	<select id="getMailTemplateList" parameterType="MailTemplate" resultType="MailTemplate">
+		/* TsaMailTemplate.getMailTemplateList */
+		SELECT MAILT_SQ                                     /*메일템플릿일련번호*/
+		     , MAILT_GB                                     /*메일템플릿구분*/
+		     , MAILT_NM                                     /*메일템플릿명*/
+		     , USE_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(UPD_NO)             AS UPD_NM /*수정자명*/
+		     , DATE_FORMAT(UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT /*수정일시*/
+		FROM   TB_MAILT
+		WHERE  1 = 1
+		<if test="mailtSq != null and mailtSq != ''">
+		AND    MAILT_SQ = #{mailtSq}
+		</if>
+		<if test="mailtGb != null and mailtGb != ''">
+		AND    MAILT_GB = #{mailtGb}
+		</if>
+		<if test="mailtNm != null and mailtNm != ''">
+		AND    LOWER(MAILT_NM) LIKE CONCAT('%',LOWER(#{mailtNm}),'%')
+		</if>
+		<if test="useYn != null and useYn != ''">
+		AND    USE_YN = #{useYn}
+		</if>
+		ORDER  BY MAILT_SQ
+	</select>
+	
+	<!-- 메일헤더푸터콤보박스 목록 -->
+	<select id="getMailHeaderFooterComboList" parameterType="String" resultType="CommonCode">
+		/* TsaMailTemplate.getMailHeaderFooterComboList */
+		SELECT MAILHF_SQ AS CD
+		     , MAILHF_NM AS CD_NM
+		FROM   TB_MAILHF
+		WHERE  MAILHF_GB = #{mailhfGb}
+		AND    USE_YN = 'Y' /*사용하는넘만*/
+		ORDER  BY MAILHF_SQ
+	</select>
+	
+	<!-- 메일템플릿 정보 -->
+	<select id="getMailTemplate" parameterType="Integer" resultType="MailTemplate">
+		/* TsaMailTemplate.getMailTemplate */
+		SELECT MAILT_SQ     /*메일템플릿일련번호*/
+		     , MAILT_GB     /*메일템플릿구분*/
+		     , MAILH_SQ     /*메일헤더일련번호*/
+		     , MAILF_SQ     /*메일푸터일련번호*/
+		     , MAILT_NM     /*메일템플릿명*/
+		     , MAIL_CONTENT /*메일내용*/
+		FROM   TB_MAILT
+		WHERE  MAILT_SQ = #{mailtSq}
+	</select>
 	
-		<insert id="saveMktmailform" parameterType="mktMailManagement" keyProperty="mailtSq">
-		/* TsaMailTemplate.saveMktmailform mkt메일 등록 수정 */
+	<!-- 메일템플릿코너 목록 -->
+	<select id="getMailTemplateCornerList" parameterType="Integer" resultType="MailTemplateCorner">
+		/* TsaMailTemplate.getMailTemplateCornerList */
+		SELECT MAILTC_SQ   /*메일템플릿코너일련번호*/
+		     , MAILT_SQ    /*메일템플릿일련번호*/
+		     , MAILTC_NM   /*메일템플릿코너명*/
+		     , GOODS_CPR   /*상품노출건수*/
+		     , MAILTC_LINK /*메일템플릿코너링크*/
+		FROM   TB_MAILTC
+		WHERE  MAILT_SQ = #{mailtSq}
+		AND    USE_YN = 'Y' /*사용하는넘만*/
+	</select>
+	
+	<!-- 메일템플릿코너상품 목록 -->
+	<select id="getMailTemplateCornerGoodsList" parameterType="Integer" resultType="MailTemplateGoods">
+		/* TsaMailTemplate.getMailTemplateCornerGoodsList */
+		SELECT M.MAILTC_SQ             /*메일템플릿코너일련번호*/
+		     , M.GOODS_CD              /*상품코드*/
+		     , B.BRAND_ENM AS BRAND_NM /*브랜드명*/
+		     , G.GOODS_NM              /*상품명*/
+		     , G.GOODS_STAT            /*상품상태*/
+		     , G.LIST_PRICE            /*정상가*/
+		     , G.CURR_PRICE            /*현재판매가*/
+		     , M.DISP_ORD              /*노출순서*/
+		FROM   TB_MAILTC_GOODS M
+		     , TB_GOODS G
+		     , TB_BRAND B
+		WHERE  M.GOODS_CD = G.GOODS_CD
+		AND    G.BRAND_CD = B.BRAND_CD
+		AND    M.MAILTC_SQ = #{mailtcSq}
+		ORDER  BY M.DISP_ORD
+	</select>
+	
+	<!-- 메일템플릿 저장 -->
+	<insert id="saveMailTemplate" parameterType="MailTemplate" keyProperty="mailtSq">
+		/* TsaMailTemplate.saveMailTemplate */
 		INSERT INTO TB_MAILT (
-				    MAILT_SQ
-				  , MAILT_NM
-				  , MAILT_GB
-				  , MAILH_SQ
-				  , MAILF_SQ
-				  , MAIL_CONTENT
-				  , USE_YN
-				  , REG_NO
-				  , REG_DT
-				  , UPD_NO
-				  , UPD_DT
-			)
-		     VALUES (
-				    #{mailtSq}
-				  , #{mailtNm}
-				  , #{mailtGb}
-				  , #{mktHeader}
-				  , IFNULL(#{mktFooter}, null )
-				  , #{mailContent}
-				  , IFNULL(#{useYn},'Y')
-				  , #{regNo}
-				  , NOW()
-				  , #{updNo}
-				  , NOW()
-			)
+		       MAILT_SQ
+		     , MAILT_NM
+		     , MAILT_GB
+		     , MAILH_SQ
+		     , MAILF_SQ
+		     , MAIL_CONTENT
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{mailtSq}
+		     , #{mailtNm}
+		     , #{mailtGb}
+		     , #{mailhSq}
+		     , #{mailfSq}
+		     , #{mailContent}
+		     , 'Y'
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
 		ON DUPLICATE KEY UPDATE
-			        MAILT_SQ = #{mailtSq}
-		          , MAILT_NM = #{mailtNm}
-		          , MAILT_GB = #{mailtGb}
-		          , MAILH_SQ = #{mktHeader}
-		          , MAILF_SQ = #{mktFooter}
-		          , MAIL_CONTENT = #{mailContent}
-		          , UPD_NO = #{updNo}
-		          , UPD_DT = NOW()
-		</insert>
+		       MAILT_NM = #{mailtNm}
+		     , MAILT_GB = #{mailtGb}
+		     , MAILH_SQ = #{mailhSq}
+		     , MAILF_SQ = #{mailfSq}
+		     , MAIL_CONTENT = #{mailContent}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
 	
-		<insert id="saveMailTc" parameterType="MktmailManagement" keyProperty="mailtcSq">
-		/* TsaMailTemplate.saveMailTc mkt메일 구분자 등록 */
-		INSERT INTO TB_MAILTC ( 
-				    MAILTC_SQ
-				  , MAILT_SQ
-				  , MAILTC_NM
-				  , GOODS_CPR
-				  , MAILTC_LINK
-				  , USE_YN
-				  , REG_NO
-				  , REG_DT
-				  , UPD_NO
-				  , UPD_DT
-			)
-		     VALUES ( 
-				    #{mailtcSq}
-				  , #{mailtSq}
-				  , #{mailtcNm}
-				  , #{goodsCpr}
-				  , #{mailtcLink}
-				  , IFNULL(#{useYn},'Y')
-				  , #{regNo}
-				  , NOW()
-				  , #{updNo}
-				  , NOW()
-			)
+	<!-- 메일템플릿코너 저장 -->
+	<insert id="saveMailTemplateCorner" parameterType="MailTemplateCorner" keyProperty="mailtcSq">
+		/* TsaMailTemplate.saveMailTemplateCorner */
+		INSERT INTO TB_MAILTC (
+		       MAILTC_SQ
+		     , MAILT_SQ
+		     , MAILTC_NM
+		     , GOODS_CPR
+		     , MAILTC_LINK
+		     , USE_YN
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{mailtcSq}
+		     , #{mailtSq}
+		     , #{mailtcNm}
+		     , #{goodsCpr}
+		     , #{mailtcLink}
+		     , 'Y'
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
 		ON DUPLICATE KEY UPDATE
-			        MAILTC_SQ = #{mailtcSq}
-			      , MAILT_SQ = #{mailtSq}
-				  , MAILTC_NM = #{mailtcNm}
-				  , GOODS_CPR = #{goodsCpr}
-				  , MAILTC_LINK = #{mailtcLink}
-				  , UPD_NO = #{updNo}
-				  , UPD_DT = NOW()
-		</insert>
+		       MAILTC_NM = #{mailtcNm}
+		     , GOODS_CPR = #{goodsCpr}
+		     , MAILTC_LINK = #{mailtcLink}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
 	
-		<insert id="saveMailGoods" parameterType="MktmailManagement" keyProperty="mailtcSq">
-		/* TsaMailTemplate.saveMailGoods mkt메일 상품등록 */
+	<!-- 메일템플릿코너상품 저장 -->
+	<insert id="saveMailTemplateCornerGoods" parameterType="MailTemplateGoods">
+		/* TsaMailTemplate.saveMailTemplateCornerGoods */
 		INSERT INTO TB_MAILTC_GOODS (
-				    MAILTC_SQ
-				  , GOODS_CD
-				  , DISP_ORD
-				  , REG_NO
-				  , REG_DT
-				  , UPD_NO
-				  , UPD_DT
-			)
-		     VALUES (
-				    #{mailtcSq}
-				  , #{goodsCd}
-				  , #{dispOrd}
-				  , #{regNo}
-				  , NOW()
-				  , #{updNo}
-				  , NOW()
-			)
+		       MAILTC_SQ
+		     , GOODS_CD
+		     , DISP_ORD
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		VALUES (
+		       #{mailtcSq}
+		     , #{goodsCd}
+		     , #{dispOrd}
+		     , #{regNo}
+		     , NOW()
+		     , #{updNo}
+		     , NOW()
+		)
 		ON DUPLICATE KEY UPDATE
-				    MAILTC_SQ = #{mailtcSq}
-				  , GOODS_CD = #{goodsCd}
-				  , DISP_ORD = #{dispOrd}
-				  , UPD_NO = #{updNo}
-				  , UPD_DT = NOW()
-		</insert>
-		
-		<select id="getMktMailList" parameterType="MktmailManagement" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktMailList mkt메일 리스트*/
-		SELECT 		   TM.MAILT_SQ
-					 , TM.MAILT_GB
-					 , TM.MAILT_NM
-					 , FN_GET_USER_NM(TM.REG_NO)             AS REG_NM
-					 , DATE_FORMAT(TM.REG_DT,'%Y%m%d%H%i%S') AS REG_DT
-					 , FN_GET_USER_NM(TM.UPD_NO)             AS UPD_NM
-					 , DATE_FORMAT(TM.UPD_DT,'%Y%m%d%H%i%S') AS UPD_DT
-		FROM    	   TB_MAILT TM
-		WHERE  		   TM.USE_YN = 'Y'
-		<if test="mktmailStdt != null and mktmailStdt != '' and mktmailEddt != null and mktmailEddt != ''">
-		AND  TM.REG_DT BETWEEN STR_TO_DATE(#{mktmailStdt}, '%Y-%m-%d%H%i%S') AND STR_TO_DATE(CONCAT(#{mktmailEddt}, '235959'),'%Y-%m-%d%H%i%S')
-		</if> 
-		<if test="searchTxt != null and searchTxt != ''">
-			<if test="searchGb != null and searchGb == 'mailtSq'">
-				AND TM.MAILT_SQ = #{searchTxt}
-			</if>
-			<if test="searchGb != null and searchGb == 'mailtNm'">
-				AND TM.MAILT_NM LIKE CONCAT('%',LOWER(#{searchTxt}), '%')
-			</if>
-		</if>
-		ORDER BY TM.MAILT_SQ DESC
-		</select>
-		
-		<select id="getMktmailManagementDetail" parameterType="Integer" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailManagementDetail mkt메일 상세화면*/
-		SELECT MAILT_SQ
-			 , MAILT_GB
-			 , MAILH_SQ
-			 , MAILF_SQ
-			 , MAILT_NM
-			 , MAIL_CONTENT
-		FROM   TB_MAILT
-		WHERE  MAILT_SQ = #{mailtSq}
-		</select>
-		
-		<select id="getMktmailManagementTCList" parameterType="MktmailManagementTc" resultType="MktmailManagementTc">
-		/* TsaMailTemplate.getMktmailManagementTCDetail mkt메일 구분자 상세화면*/
-		SELECT 		TC.MAILTC_SQ
-			 	  , TC.MAILT_SQ	
-			 	  , TC.MAILTC_NM
-			  	  , TC.GOODS_CPR	
-			 	  , TC.MAILTC_LINK
-		FROM   		TB_MAILTC TC
-		INNER JOIN 	TB_MAILT TM
-		ON 			TM.MAILT_SQ = TC.MAILT_SQ 
-		WHERE  		TC.MAILT_SQ = #{mailtSq}
-		AND	  		TC.USE_YN = "Y"
-		</select>
-		
-		<select id="getMktmailManagementGoodsList" parameterType="MktmailManagementTc" resultType="MktmailManagementGoods">
-		/* TsaMailTemplate.getMktmailManagementGoodsList mkt메일 상품 상세화면*/
-		SELECT		TG.MAILTC_SQ
-				  , TG.GOODS_CD
-			      , TBRAND.BRAND_ENM 
-			      , tbg.GOODS_NM 
-			      , TBG.GOODS_STAT
-			      , TBG.LIST_PRICE 
-			      , TBG.CURR_PRICE
-			      , TG.DISP_ORD
-		FROM 		TB_MAILTC_GOODS TG
-		INNER JOIN  TB_MAILTC TC
-		ON 			TC.MAILTC_SQ = TG.MAILTC_SQ 
-		INNER JOIN  tb_goods TBG
-		ON 			TBG.GOODS_CD = TG.GOODS_CD 
-		INNER JOIN 	tb_brand TBRAND
-		ON		    TBRAND.BRAND_CD = TBG.BRAND_CD
-		WHERE 		TC.MAILTC_SQ = #{mailtcSq}
-		ORDER  BY 	TG.DISP_ORD
-		</select>
-		
-		<select id="getMktmailPreviewGoodsList" parameterType="MktmailManagementTc" resultType="MktmailManagementGoods">
-		/* TsaMailTemplate.getMktmailPreviewGoodsList mkt메일 미리보기 상품정보 호출*/
-		SELECT		TG.MAILTC_SQ
-				  ,	IMG.SYS_IMG_NM
-			      , TBRAND.BRAND_ENM 
-			      , tbg.GOODS_NM 
-			      , TBG.LIST_PRICE 
-			      , TBG.CURR_PRICE
-		FROM 		TB_MAILTC_GOODS TG
-		INNER JOIN  TB_MAILTC TC
-		ON 			TC.MAILTC_SQ = TG.MAILTC_SQ 
-		INNER JOIN  tb_goods TBG
-		ON 			TBG.GOODS_CD = TG.GOODS_CD 
-		INNER JOIN 	tb_brand TBRAND
-		ON		    TBRAND.BRAND_CD = TBG.BRAND_CD
-		INNER JOIN  TB_GOODS_IMG IMG
-		ON  		IMG.GOODS_CD = TG.GOODS_CD
-		WHERE 		TC.MAILTC_SQ = #{mailtcSq}
-		AND 		IMG.DEFAULT_IMG_YN = 'Y'
-		ORDER  BY 	TG.DISP_ORD
-		</select>
-		
-		<update id='deleteMktmailList' parameterType='MktmailManagement'>
-		/* TsaMailTemplate.deleteMailHFList mkt메일 리스트 삭제*/
+		       DISP_ORD = #{dispOrd}
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+	</insert>
+	
+	<!-- 메일템플릿코너 삭제 -->
+	<delete id="deleteMailTemplateCorner" parameterType='MailTemplateCorner'>
+		/* TsaMailTemplate.deleteMailTemplateCorner */
+		UPDATE TB_MAILTC
+		SET    USE_YN = 'N'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  MAILTC_SQ = #{mailtcSq}
+	</delete>
+	
+	<!-- 메일템플릿코너상품 삭제 -->
+	<delete id="deleteMailTemplateCornerGoods" parameterType='MailTemplateGoods'>
+		/* TsaMailTemplate.deleteMailTemplateCornerGoods */
+		DELETE FROM	TB_MAILTC_GOODS
+		WHERE  MAILTC_SQ = #{mailtcSq}
+		AND    GOODS_CD = #{goodsCd}
+	</delete>
+	
+	<!-- 메일템플릿 삭제 -->
+	<update id="deleteMailTemplate" parameterType="MailTemplate">
+		/* TsaMailTemplate.deleteMailTemplate */
 		UPDATE  TB_MAILT
-	  	SET     USE_YN = 'N'
+		SET     USE_YN = #{useYn}
+		      , UPD_NO = #{updNo}
+		      , UPD_DT = NOW()
 		WHERE   MAILT_SQ = #{mailtSq}
-		</update>
-		
-		<delete id="deleteMktCorner" parameterType='MktmailManagementTc'>
-		/* TsaMailTemplate.deleteMktCorner mkt메일 구분자 삭제*/
-		UPDATE  TB_MAILTC
-		SET		USE_YN = 'N'
-		WHERE	MAILTC_SQ = #{mailtcSq}
-		</delete>
-		
-		<delete id="deleteMktGoodsList" parameterType='MktmailManagementGoods'>
-		/* TsaMailTemplate.deleteMktGoods mkt메일 상품 삭제*/
-		DELETE 	
-		FROM	TB_MAILTC_GOODS
-		WHERE	MAILTC_SQ = #{mailtcSq}
-		</delete>
-		
-		<select id="getMktmailPreviewHeader" parameterType="Integer" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailPreviewHeader mkt메일 미리보기 헤더 호출*/
-		SELECT 		HF.MAILHF_CONTENT
-		FROM   		TB_MAILT TM
-		INNER JOIN  TB_MAILHF HF
-		ON 	  		TM.MAILH_SQ = HF.MAILHF_SQ
-		WHERE 		HF.MAILHF_GB = 'H'
-		AND 		TM.MAILT_SQ = #{mailtSq}
-		</select>
-		
-		<select id="getMktmailPreviewFooter" parameterType="Integer" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailPreviewFooter mkt메일 미리보기 푸터 호출*/
-		SELECT 		HF.MAILHF_CONTENT
-		FROM   		TB_MAILT TM
-		INNER JOIN  TB_MAILHF HF
-		ON 	  		TM.MAILF_SQ = HF.MAILHF_SQ
-		WHERE 		HF.MAILHF_GB = 'F'
-		AND 		TM.MAILT_SQ = #{mailtSq}
-		</select>
-		
-		<select id="getMktmailPreviewContent" parameterType="MktmailManagement" resultType="MktmailManagement">
-		/* TsaMailTemplate.getMktmailPreviewContent mkt메일 미리보기 내용 호출*/
-		SELECT 		MAILT_NM
-				  , MAIL_CONTENT
-		FROM		TB_MAILT
-		WHERE 		MAILT_SQ =   #{mailtSq}
-		</select>
+	</update>
+	
+	<!-- 메일템플릿 미리보기 조회 -->
+	<select id="getMailTemplatePreview" parameterType="Integer" resultType="MailTemplate">
+		/* TsaMailTemplate.getMailTemplatePreview */
+		SELECT A.MAILT_GB                        /*메일템플릿구분*/
+		     , B.MAILHF_CONTENT AS MAILH_CONTENT /*헤더내용*/
+		     , C.MAILHF_CONTENT AS MAILF_CONTENT /*푸터내용*/
+		     , A.MAIL_CONTENT                    /*메일내용*/
+		FROM   TB_MAILT A
+		     , TB_MAILHF B
+		     , TB_MAILHF C
+		WHERE  A.MAILH_SQ = B.MAILHF_SQ /*헤더*/
+		AND    A.MAILF_SQ = C.MAILHF_SQ /*푸터*/
+		AND    A.MAILT_SQ = #{mailtSq}
+	</select>
 	
 </mapper>

+ 2 - 2
src/main/java/com/style24/persistence/mybatis/shop/TsaMorebetter.xml

@@ -203,7 +203,7 @@
 		  AND A.TARGET_GB = 'G260_10'
 		  AND A.GOODS_GB IN ('G800_10','G800_20')
  		  AND A.DEL_YN = 'N'
-		GROUP BY A.TMTB_GOODS_SQ
+		GROUP BY A.TMTB_GOODS_SQ, B.TMTB_APPLY_GOODS_SQ
 	</select>
 
 	<select id="getMorebetterExceptGoodsList" parameterType="MoreBetterGoods" resultType="MoreBetterGoods">
@@ -233,7 +233,7 @@
 		  AND A.TARGET_GB = 'G260_10'
 		  AND A.GOODS_GB IN ('G800_30')
 		  AND A.DEL_YN = 'N'
-		GROUP BY A.TMTB_GOODS_SQ
+		GROUP BY A.TMTB_GOODS_SQ, B.TMTB_APPLY_GOODS_SQ
 	</select>
 
 	<select id="getMorebetterBurdenList" parameterType="Integer" resultType="MoreBetterBurden">

+ 137 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaWithdraw.xml

@@ -218,7 +218,7 @@
 
 	<!-- 회수예외 처리완료-->
 	<update id="updateWithdrawException" parameterType="WithdrawExc" >
-		/* TsaWithdraw.deleteBangoods */
+		/* TsaWithdraw.updateWithdrawException */
 		UPDATE TB_ORDER_RECALL_EXCEPTION SET
 		  RECALL_STAT = #{recallStat}
 		, RECALL_STAT_DT = NOW()
@@ -234,5 +234,141 @@
 			WHERE OPT_CD = #{skucode} 
 	</select>
 	
+	<!-- 회수지시 목록 건수 -->
+	<select id="getWithdrawDirectiveListCount" parameterType="Withdraw" resultType="int">
+		/* TsaWithdraw.getWithdrawDirectiveListCount */
+				SELECT COUNT(*) AS TOTCNT
+				  FROM (		
+						SELECT 
+						       O.ORD_NO                                 -- 주문번호
+						     , OCD.ORD_DTL_NO                           -- 주문상세번호
+						     , OD.GOODS_CD                   -- 상품코드
+						FROM   TB_ORDER_CHANGE OC          
+						JOIN   TB_ORDER_CHANGE_DETAIL OCD ON OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+						JOIN   TB_ORDER_DETAIL OD         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+						JOIN   TB_ORDER O                 ON OD.ORD_NO      = O.ORD_NO
+						JOIN   TB_GOODS G                 ON OD.GOODS_CD     = G.GOODS_CD
+						JOIN   TB_DELIVERY_LOC D          ON OD.DELV_LOC_CD = D.DELV_LOC_CD AND OD.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
+						WHERE  1=1 
+						<include refid="getWithdrawDirectiveCondition_sql"/>
+					) A
+
+	</select>
 	
+	<!-- 회수지시 목록 -->
+	<select id="getWithdrawDirectiveList" parameterType="Withdraw" resultType="Withdraw">
+		/* TsaWithdraw.getWithdrawDirectiveList */
+		SELECT Z.*
+		     , FN_GET_CODE_NM('G680', Z.CHG_GB) AS CHG_GB_NM
+		     , CASE WHEN CHG_GB = 'G680_30' THEN FN_GET_CODE_NM('G688', Z.CHG_REASON) ELSE FN_GET_CODE_NM('G689', Z.CHG_REASON) END AS CHG_REASON_NM
+		     , FN_GET_CODE_NM('G320', Z.WD_SHIP_STATE) AS WD_SHIP_STATE_NM
+		     , CASE WHEN WD_SHIP_STATE = '12' THEN   FN_GET_CODE_NM('G321', Z.WD_REASON_CD)
+		            WHEN WD_SHIP_STATE = '84' THEN   FN_GET_CODE_NM('G322', Z.WD_REASON_CD) ELSE '' END AS WD_REASON_CD_NM
+		     , FN_GET_CODE_NM('G685', Z.CHG_STAT) AS CHG_STAT_NM
+		FROM (
+		    SELECT A.*, ROW_NUMBER() OVER(ORDER BY  A.ORD_CHG_SQ, A.ORD_NO DESC, A.ORD_DTL_NO )  RNUM 
+		    FROM ( 
+				SELECT A.* 
+				  FROM (
+						SELECT DISTINCT
+						       OC.ORD_CHG_SQ                            -- 주문변경번호 
+						     , OC.CHG_GB                                -- 변경구분 G680
+						     , OC.CHG_REASON                            -- 변경사유 반품G688 교환G689
+						     , OC.WD_GB                                 -- 직접배송여부
+						     , DATE_FORMAT(OC.REG_DT, '%Y-%m-%d') AS REG_DT  -- 회수요청일
+						     , OC.WD_INVOICE_NO                         -- 회수송장번호
+						     , OC.WD_SHIP_STATE                         -- 배송업체회수상태 G320
+						     , OC.WD_STATE_DT                           -- 회수상태 수신일시 
+						     , OC.WD_REASON_CD                          -- 미회수사유 G321 G322
+						     , OC.WD_BF_SEND_YN                         -- 교환 선발송 여부 
+						     , OC.WD_INVOICE_SEND_YN AS SEND_YN         -- 전송여부
+						     , O.ORD_NO                                 -- 주문번호
+						     , OCD.ORD_DTL_NO                           -- 주문상세번호
+						     , OCD.CHG_STAT                             -- 변경상태 G685
+						     , OD.GOODS_CD                              -- 상품코드
+						     , G.GOODS_NM                               -- 상품명
+						     , OCD.CHG_QTY                              -- 변경수량
+						     , DATE_FORMAT(OC.WD_STDT, '%Y-%m-%d %H:%i:%S') AS WD_STDT  -- 배송시작일시
+						     , DATE_FORMAT(OC.WD_EDDT, '%Y-%m-%d %H:%i:%S') AS WD_EDDT  -- 배송종료일시
+						     , D.RTN_LOC_NM          AS RECIP_NM        -- 수취인명
+						     , OC.CHGER_NM                              -- 변경자명
+						     , OC.CHGER_PHNNO                           -- 변경자휴대전화번호
+						     , OC.CHGER_TELNO                           -- 변경자전화번호
+						     , OC.CHGER_ZIPCODE                         -- 변경자우편번호
+						     , OC.CHGER_BASE_ADDR                       -- 변경자기본주소
+						     , OC.CHGER_DTL_ADDR                        -- 변경자상세주소
+						     , O.ORD_NM                                 -- 주문자명
+						     , O.ORD_PHNNO                              -- 주문자휴대전화번호
+						     , O.ORD_TELNO                              -- 주문자전화번호
+						     , O.ORD_EMAIL                              -- 주문자이메일
+						FROM   TB_ORDER_CHANGE OC          
+						JOIN   TB_ORDER_CHANGE_DETAIL OCD ON OC.ORD_CHG_SQ  = OCD.ORD_CHG_SQ 
+						JOIN   TB_ORDER_DETAIL OD         ON OCD.ORD_DTL_NO = OD.ORD_DTL_NO
+						JOIN   TB_ORDER O                 ON OD.ORD_NO      = O.ORD_NO
+						JOIN   TB_GOODS G                 ON OD.GOODS_CD     = G.GOODS_CD
+						JOIN   TB_DELIVERY_LOC D          ON OD.DELV_LOC_CD = D.DELV_LOC_CD AND OD.SUPPLY_COMP_CD = D.SUPPLY_COMP_CD
+						WHERE  1=1 
+						<include refid="getWithdrawDirectiveCondition_sql"/>
+					) A
+				ORDER BY A.ORD_CHG_SQ, A.ORD_NO DESC, A.ORD_DTL_NO
+				<include refid="getListPagingCondition_sql"/>
+	</select>
+
+    <!-- 환불관리 목록 조회 조건  -->
+	<sql id="getWithdrawDirectiveCondition_sql">
+		<if test="ordNm != null and ordNm != ''">
+			AND O.ORD_NM = #{ordNm}
+		</if>
+		<if test="ordNo != null and ordNo != ''">
+			AND O.ORD_NO = #{ordNo}
+		</if>
+		<if test="ordChgSq != null and ordChgSq != ''">
+			AND OC.ORD_CHG_SQ = #{ordChgSq}
+		</if>		
+		<if test="chgGb == null or chgGb == ''">
+			AND    OC.CHG_GB IN ('G680_30','G680_40') -- 반품요청,교환요청
+		</if>
+		<if test="chgGb != null and chgGb != ''">
+			AND OC.CHG_GB = #{chgGb}
+		</if>
+		
+		<if test="chgStat != null and chgStat != ''">
+			AND OCD.CHG_STAT = #{chgStat}
+		</if>
+		<if test="chgStat == null or chgStat == ''">
+			AND OCD.CHG_STAT IN('G685_20','G685_50','G685_30','G685_40','G685_60','G685_49','G685_69')
+		</if>
+		
+		<if test="wdGb != null and wdGb != ''">
+			AND OC.WD_GB = #{wdGb}
+		</if>	
+		<if test="sendYn != null and sendYn != ''">
+		AND    OC.WD_INVOICE_SEND_YN = #{sendYn}
+		</if>
+		<if test="wdShipState != null and wdShipState != ''">
+		AND    OC.WD_SHIP_STATE = #{wdShipState}
+		</if>
+		
+		<if test="stDate != null and stDate != ''">
+		AND    OC.REG_DT <![CDATA[>=]]> STR_TO_DATE(REPLACE(#{stDate},'-','') , '%Y%m%d%H%i%s')
+		</if>
+		<if test="edDate != null and edDate != ''">
+		AND    OC.REG_DT <![CDATA[<]]> STR_TO_DATE(REPLACE(#{edDate},'-','')+1 , '%Y%m%d%H%i%s')
+		</if>
+		AND    G.SELF_GOODS_YN = 'Y' -- 자사상품만
+		AND    OCD.DEL_YN      = 'N'	
+	</sql>		
+			
+	<!-- 재회수지시-->
+	<update id="updateReRecallOrder" parameterType="Withdraw" >
+		/* TsaWithdraw.updateReRecallOrder */
+		UPDATE TB_ORDER_CHANGE_DETAIL SET
+		  CHG_STAT = #{chgStat}
+		, UPD_NO   = #{updNo}
+		, UPD_DT   = NOW()
+		WHERE ORD_CHG_SQ = #{ordChgSq} 
+		  AND ORD_DTL_NO = #{ordDtlNo}
+
+	</update>
+
 </mapper>

+ 1 - 1
src/main/webapp/WEB-INF/views/delivery/DeliveryListForm.html

@@ -29,7 +29,7 @@
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
-			<h3><i class="fa fa-info-circle"></i>아래 검색조건 <font color="red">기간, 키워드</font>중 하나를 꼭 입력해 주세요.</h3>
+			<h3><i class="fa fa-info-circle"></i>아래 검색조건 <font color="red">기간, 키워드</font>중 하나를 꼭 입력해 주세요.</h3>
 			<span class="panelControl">
 				<i class="fa fa-chevron-up"></i>
 			</span>

+ 4 - 4
src/main/webapp/WEB-INF/views/display/MainContentsPopupForm.html

@@ -109,7 +109,7 @@
 				if(contentsLoc=='SBM005' || contentsLoc=='SBMM005'){
 					html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddBrandDescRow(this);">브랜드소개추가</button>';
 				}
-				if(contentsLoc!='SMM005' && contentsLoc!='SBM005' && contentsLoc!='SBMM005' && contentsLoc!='SGNB001'  && contentsLoc!='SMM011' && contentsLoc!='SBM012' && contentsLoc!='SBMM012'){
+				if(contentsLoc!='SMM005' && contentsLoc!='SBM005' && contentsLoc!='SBMM005' && contentsLoc!='SGNB001' && contentsLoc!='SGNB002'  && contentsLoc!='SMM011' && contentsLoc!='SBM012' && contentsLoc!='SBMM012'){
 					html += '<button type="button" class="btn btn-base btn-lg" onclick="fnAddImgPopRow(this);">이미지추가</button>';
 				}
 				if(contentsLoc!='SMM011' && contentsLoc!='SBM012' && contentsLoc!='SBMM012'){
@@ -118,7 +118,7 @@
 				html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
 			}
 			html += '</tr>';
-			if(contentsLoc=='SBM004' || contentsLoc=='SBM005' || contentsLoc=='SBMM004'){
+			if(contentsLoc=='SBM004' || contentsLoc=='SBM005' || contentsLoc=='SBMM004' || contentsLoc=='SBMM005'){
 				html += '<tr class="cateTypeTr">';
 				html += '	<th>클릭시<br>페이지창</th>';
 				html += '	<td colspan="3">';
@@ -567,7 +567,7 @@
 		}
 		html += '<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteContentsRow(this);">삭제</button></td>';
 		html += '</tr>';
-		if(contentsLoc=='SBM004' || contentsLoc=='SBM005' || contentsLoc=='SBMM004'){
+		if(contentsLoc=='SBM004' || contentsLoc=='SBM005' || contentsLoc=='SBMM004' || contentsLoc=='SBMM005'){
 			html += '<tr class="cateTypeTr">';
 			html += '	<th>클릭시<br>페이지창</th>';
 			html += '	<td colspan="3">';
@@ -936,7 +936,7 @@
 
 			var dispOrd = $(this).find("[name=dispOrd]").val();
 
-			if(contentsLoc=='SBM004' || contentsLoc=='SBM005' || contentsLoc=='SBMM004'){
+			if(contentsLoc=='SBM004' || contentsLoc=='SBM005' || contentsLoc=='SBMM004' || contentsLoc=='SBMM005'){
 				var thisIdx = $(this).find("input[name=tableIdx]").val();
 				contentsType = $(this).find("input:radio[name=pageTarget"+thisIdx+"]:checked").val();
 			}

+ 51 - 12
src/main/webapp/WEB-INF/views/display/MainGnbContentsPopupForm.html

@@ -425,15 +425,42 @@
 	var fnCreateBrandLayout = function (result){
 		var html = '';
 		for(var i=0; i<result.length; i++){
-			var g1cdArr = result[i].group1brandCd.split(",");
-			var g2cdArr = result[i].group2brandCd.split(",");
-			var g3cdArr = result[i].group3brandCd.split(",");
-			var g1nmArr = result[i].group1brandNm.split(",");
-			var g2nmArr = result[i].group2brandNm.split(",");
-			var g3nmArr = result[i].group3brandNm.split(",");
-			var g1imgArr = result[i].group1brandImg.split(",");
-			var g2imgArr = result[i].group2brandImg.split(",");
-			var g3imgArr = result[i].group3brandImg.split(",");
+			var g1cdArr;
+			var g2cdArr;
+			var g3cdArr;
+			var g1nmArr;
+			var g2nmArr;
+			var g3nmArr;
+			var g1imgArr;
+			var g2imgArr;
+			var g3imgArr;
+			if(!gagajf.isNull(result[i].group1brandCd)){
+				g1cdArr = result[i].group1brandCd.split(",");
+			}
+			if(!gagajf.isNull(result[i].group2brandCd)){
+				g2cdArr = result[i].group2brandCd.split(",");
+			}
+			if(!gagajf.isNull(result[i].group3brandCd)){
+				g3cdArr = result[i].group3brandCd.split(",");
+			}
+			if(!gagajf.isNull(result[i].group1brandNm)){
+				g1nmArr = result[i].group1brandNm.split(",");
+			}
+			if(!gagajf.isNull(result[i].group2brandNm)){
+				g2nmArr = result[i].group2brandNm.split(",");
+			}
+			if(!gagajf.isNull(result[i].group3brandNm)){
+				g3nmArr = result[i].group3brandNm.split(",");
+			}
+			if(!gagajf.isNull(result[i].group1brandImg)){
+				g1imgArr = result[i].group1brandImg.split(",");
+			}
+			if(!gagajf.isNull(result[i].group2brandImg)){
+				g2imgArr = result[i].group2brandImg.split(",");
+			}
+			if(!gagajf.isNull(result[i].group3brandImg)){
+				g3imgArr = result[i].group3brandImg.split(",");
+			}
 
 			var dispStdt = result[i].dispStdt.split(" ");
 			var dispEddt = result[i].dispEddt.split(" ");
@@ -480,7 +507,11 @@
 				html += '<ul id="brandUl' + k + '" class="item ui-state-default brandClass" style="min-height:80px;">';
 				html += '	<input type="hidden" name="brandGroupNo" value="' + g1cdArr[k] + '">';
 				html += '	<li class="img">';
-				html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g1imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+				if(gagajf.isNull(g1imgArr)){
+					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.gif\';"/>';
+				}else{
+					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g1imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+				}
 				html += '	</li>';
 				html += '	<li class="cont">';
 				html += '		<ul>';
@@ -507,7 +538,11 @@
 				html += '<ul id="brandUl' + m + '" class="item ui-state-default brandClass" style="min-height:80px;">';
 				html += '	<input type="hidden" name="brandGroupNo" value="' + g2cdArr[m] + '">';
 				html += '	<li class="img">';
-				html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g2imgArr[m] + '" onerror="this.src=\'/image/no.gif\';"/>';
+				if(gagajf.isNull(g2imgArr)){
+					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.gif\';"/>';
+				}else{
+					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g2imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+				}
 				html += '	</li>';
 				html += '	<li class="cont">';
 				html += '		<ul>';
@@ -534,7 +569,11 @@
 				html += '<ul id="brandUl' + n + '" class="item ui-state-default brandClass" style="min-height:80px;">';
 				html += '	<input type="hidden" name="brandGroupNo" value="' + g3cdArr[n] + '">';
 				html += '	<li class="img">';
-				html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g3imgArr[n] + '" onerror="this.src=\'/image/no.gif\';"/>';
+				if(gagajf.isNull(g3imgArr)){
+					html += '		<img style="height:100%;" src="" onerror="this.src=\'/image/no.gif\';"/>';
+				}else{
+					html += '		<img style="height:100%;" src="' + uploadGoodsUrl + "/" + g3imgArr[k] + '" onerror="this.src=\'/image/no.gif\';"/>';
+				}
 				html += '	</li>';
 				html += '	<li class="cont">';
 				html += '		<ul>';

+ 41 - 53
src/main/webapp/WEB-INF/views/marketing/MailHeaderFooterDetailForm.html

@@ -4,28 +4,29 @@
 <!--
  *******************************************************************************
  * @source  : MailHeaderFooterDetailForm.html
- * @desc    : MailHeaderFooter 등록/수정 상세 팝업화면
+ * @desc    : 메일헤더푸터 등록/수정 상세 팝업
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021. 02. 02   csh9191     최초 작성
+ * 1.0  2021.02.02   csh9191     최초 작성
+ * 1.1  2021.05.13   gagamel     전반적 수정
  *******************************************************************************
  -->
-<div class="modalPopup" data-width="1200" id="popupMailHF">
+<div class="modalPopup" data-width="1200" id="popupMailHeaderFooter">
 	<div class="panelStyle">
 		<!-- TITLE -->
 		<div class="panelTitle">
-			<strong th:text="${'메일 헤더/푸터 ' + (mode == 'N' ? '등록' : '상세')}">메일 헤더/푸터</strong>
-			<button type="button" class="close" onclick="uifnPopupClose('popupMailHF');"><em class="fa fa-times"></em></button>
+			<strong th:text="${'메일헤더/푸터 ' + (mode == 'N' ? '등록' : '상세')}">메일헤더/푸터</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupMailHeaderFooter');"><em class="fa fa-times"></em></button>
 		</div>
 		<!-- //TITLE -->
 		
 		<!-- CONTENT -->
 		<div class="panelContent">
-			<form id="mailHFForm" name="mailHFForm" action="#" th:action="@{'/marketing/mailtemplate/save'}" th:method="post">
+			<form id="mailHeaderFooterForm" name="mailHeaderFooterForm" action="#" th:action="@{'/marketing/mail/headerfooter/save'}" th:method="post">
 				<input type="hidden" name="mode" th:value="${mode}"/>
 				
 				<table class="frmStyle" aria-describedby="등록폼">
@@ -35,28 +36,28 @@
 					</colgroup>
 					<tbody>
 						<tr>
-							<th>번호</th>
+							<th>헤더푸터번호</th>
 							<td>
-								<input type="text" name="mailhfSq" maxlength="20" placeholder="자동생성" readonly="readonly"/>								
-							</td>							
+								<input type="text" name="mailhfSq" maxlength="20" placeholder="자동생성" readonly="readonly" th:value="${mailhfInfo?.mailhfSq}"/>
+							</td>
 						</tr>
 						<tr>
-							<th>구분<em class="required" title="필수"></em></th>
+							<th>헤더푸터구분<em class="required" title="필수"></em></th>
 							<td>
-								<label class="rdoBtn"><input type="radio" name="mailhfGb" value="H" checked="checked"/>헤더</label>
-								<label class="rdoBtn"><input type="radio" name="mailhfGb" value="F"/>푸터</label>
+								<label class="rdoBtn"><input type="radio" name="mailhfGb" value="H" th:checked="${mailhfInfo?.mailhfGb == null or mailhfInfo?.mailhfGb == 'H'}"/>헤더</label>
+								<label class="rdoBtn"><input type="radio" name="mailhfGb" value="F" th:checked="${mailhfInfo?.mailhfGb == 'F'}"/>푸터</label>
 							</td>
 						</tr>
 						<tr>
-							<th>타이틀<em class="required" title="필수"></em></th>
+							<th>헤더푸터명<em class="required" title="필수"></em></th>
 							<td>
-								<input type="text" name="mailhfNm" maxlength="50" required="required" data-valid-name="타이틀"/>
+								<input type="text" name="mailhfNm" maxlength="50" required="required" data-valid-name="헤더푸터명" th:value="${mailhfInfo?.mailhfNm}"/>
 							</td>
 						</tr>
 						<tr>
 							<th>내용<em class="required" title="필수"></em></th>
 							<td>
-								<textarea class="textareaR4" id="mailhfContent" name="mailhfContent" data-valid-name="내용"></textarea>
+								<textarea class="textareaR4" id="mailhfContent" name="mailhfContent" data-valid-name="내용" th:text="${mailhfInfo?.mailhfContent}"></textarea>
 							</td>
 						</tr>
 					</tbody>
@@ -67,11 +68,9 @@
 
 		<!-- 버튼 배치 영역 -->
 		<ul class="panelBar">
-			<li class="left"  th:if="${mode  == 'N' }">
-				<button type="button" class="btn btn-danger btn-lg" id="btndeleteMailHF">삭제</button>
-			</li>
 			<li class="right">
-				<button type="button" class="btn btn-info btn-lg" id="btnSaveMailHF">저장</button>
+				<button type="button" class="btn btn-info btn-lg" id="btnSaveMailHeaderFooter">저장</button>
+				<button type="button" class="btn btn-danger btn-lg" id="btnDeleteMailHeaderFooter" th:if="${mode == 'U'}">삭제</button>
 			</li>
 		</ul>
 		<!-- //버튼 배치 영역 -->
@@ -82,24 +81,10 @@
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=20201030"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
-	let mailhfInfo = [[${mailhfInfo}]];
-	let mode = [[${mode}]]; 
-
-	//팝업창 삭제버튼
-	$('#btndeleteMailHF').on('click', function() {
-		mcxDialog.confirm("등록하신 내용을 삭제하시겠습니까?<br>삭제한 내용은 복원하실 수 없습니다.", {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				uifnPopupClose('popupMailHF'); //팝업 창 닫기
-			}
-		});
-	});
-	
 	// 저장
-	$('#btnSaveMailHF').on('click', function() {
+	$('#btnSaveMailHeaderFooter').on('click', function() {
 		// 입력 값 체크
-		if (!gagajf.validation('#mailHFForm'))
+		if (!gagajf.validation('#mailHeaderFooterForm'))
 			return false;
 		
 		if (gagajf.isNull($('#mailhfContent').val())) {
@@ -107,39 +92,42 @@
 			return false;
 		}
 		
-		//타이틀 길이 제한 2자 이상 50자 미만
-		var check = $('#mailHFForm input[name=mailhfNm]').val();
+		// 헤더푸터명 길이 제한 2자 이상 50자 미만
+		var check = $('#mailHeaderFooterForm input[name=mailhfNm]').val();
 
-		if(check.length < 2){
-			mcxDialog.alert('타이틀은 2자 이상 50자 미만으로 입력하세요.');
+		if (check.length < 2) {
+			mcxDialog.alert('헤더푸터명은 2자 이상 50자 미만으로 입력해 주세요.');
 			return false;
 		}
 		
-		mcxDialog.confirm("내용을 등록 하시겠습니까?", {
+		mcxDialog.confirm("저장하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
-				gagajf.ajaxFormSubmit($('#mailHFForm').prop('action'), '#mailHFForm', function() {
-					uifnPopupClose('popupMailHF');
+				gagajf.ajaxFormSubmit($('#mailHeaderFooterForm').prop('action'), '#mailHeaderFooterForm', function() {
+					uifnPopupClose('popupMailHeaderFooter');
 					$('#btnSearch').trigger('click');
 				});
 			}
 		});
 	});
 	
-	
+	// 삭제
+	$('#btnDeleteMailHeaderFooter').on('click', function() {
+		mcxDialog.confirm("정말 삭제하시겠습니까? 삭제한 내용은 복원하실 수 없습니다.", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var actionUrl = '/marketing/mail/headerfooter/delete/' + $('#mailHeaderFooterForm input[name=mailhfSq]').val();
+				gagajf.ajaxFormSubmit(actionUrl, '#mailHeaderFooterForm', function() {
+					uifnPopupClose('popupMailHeaderFooter');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
 
 	$(document).ready(function() {
-		if (mode == 'U') {
-			$('#mailHFForm input[name=mailhfSq]').val(mailhfInfo.mailhfSq);
-			$('#mailHFForm input[name=mailhfNm]').val(mailhfInfo.mailhfNm);
-			$('#mailHFForm textarea[name=mailhfContent]').val(mailhfInfo.mailhfContent);
-			
-			if (mailhfInfo.mailhfGb == 'F') {
-				$('#mailHFForm input:radio[name="mailhfGb"]:radio[value="F"]').prop('checked', true);
-			}
-		}
-		
 		// Create a summernote
 		let snOptions = gagaSn.getToolbarOptions();
 		gagaSn.createSummernote(snOptions, '#mailhfContent');

+ 42 - 57
src/main/webapp/WEB-INF/views/marketing/MailHeaderFooterForm.html

@@ -3,15 +3,16 @@
 	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
- * @source  : MailHeaderFooter.html
- * @desc    : MailHeaderFooter 관리 화면
+ * @source  : MailHeaderFooterForm.html
+ * @desc    : 메일헤더푸터관리 화면
  *============================================================================
  * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2021. 02. 01   csh9191     최초 작성
+ * 1.0  2021.02.01   csh9191     최초 작성
+ * 1.1  2021.05.13   gagamel     전반적 수정
  *******************************************************************************
  -->
 	<div id="main">
@@ -27,15 +28,12 @@
 		
 		<!-- 검색조건 영역 -->
 		<div class="panelStyle">
-			<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/mailtemplate/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/mail/headerfooter/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
 				<table class="frmStyle" aria-describedby="검색조건">
 					<colgroup>
 						<col style="width:10%;"/>
 						<col style="width:20%;"/>
 						<col style="width:10%;"/>
-						<col style="width:20%;"/>
-						<col style="width:10%;"/>
-						<col style="width:20%;"/>
 						<col/>
 					</colgroup>
 					<tr>
@@ -47,13 +45,9 @@
 								<option value="F">푸터</option>
 							</select>
 						</td>
-						<th>타이틀 명</th>
+						<th>헤더푸터명</th>
 						<td>
-							<input type="text" name="mailhfNm" class="w200"/>
-						</td>
-						<th>등록자</th>
-						<td>
-							<input type="text" name="searchTxt" class="w200"/>
+							<input type="text" name="mailhfNm" class="w200" maxlength="50"/>
 						</td>
 					</tr>
 				</table>
@@ -69,53 +63,49 @@
 		<!-- 검색조건 영역 -->
 			
 		<!-- 리스트 영역 -->
-			<div class="panelStyle">
-				<!-- 버튼 배치 영역 -->
-				<ul class="panelBar">
-					<li class="left">
-						<button type="button" class="btn btn-danger btn-lg" id="btnDeleteRow">선택삭제</button>	
-					</li>
-					<li class="right">
-						<button type="button" class="btn btn-info btn-lg" onclick="fnOpenMailHFPopup('N');">메일헤더푸터 등록</button>
-					</li>
-				</ul>
-				<!-- //버튼 배치 영역 -->
-				<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
-			</div>
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="left">
+					<button type="button" class="btn btn-danger btn-lg" id="btnDeleteRow">선택삭제</button>	
+				</li>
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" onclick="fnOpenMailHeaderFooterPopup('N');">메일헤더푸터 등록</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		</div>
 		<!-- //리스트 영역 -->
-	
 	</div>
 
 <script th:inline="javascript">
 /*<![CDATA[*/
-	
 	//헤더 푸터 구분 표시
 	let mailhfGb = { "H":"헤더", "F":"푸터" };
 
 	// specify the columns
 	let columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "헤더푸터번호", field: "mailhfSq", width: 150, cellClass: 'text-center'},
 		{
-			width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false
-		},
-		{
-		 	headerName: "구분", field: "mailhfGb", width: 100, cellClass: 'text-center',
+		 	headerName: "헤더푸터구분", field: "mailhfGb", width: 150, cellClass: 'text-center',
 		 	valueFormatter: function (params) { return gagaAgGrid.lookupValue(mailhfGb, params.value); }
 		},
-		{	headerName: "타이틀", field: "mailhfNm", width: 300, cellClass: 'text-center',
-			cellRenderer: function(params) { 
-				return '<a href="javascript:void(0);">' + params.value + '</a>'; 
-			}
-		},
 		{
-			headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
+			headerName: "헤더푸터명", field: "mailhfNm", width: 350,
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
 		{
-			headerName: "등록일시", field: "regDt", width: 200, cellClass: 'text-center',
+			headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
 		},
+		{headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
 		{
-			headerName: "수정자", field: "updNm", width: 150, cellClass: 'text-center'},
-		{
-			headerName: "수정일시", field: "updDt", width: 200, cellClass: 'text-center', 
+			headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center', 
 			cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
 		}
 	];
@@ -123,21 +113,20 @@
 	// Get GridOptions
 	let gridOptions = gagaAgGrid.getGridOptions(columnDefs); 
 
-	// Add on options
-	gridOptions.rowSelection = 'multiple';	//셀렉박스 다중 선택
+	// 다중 선택
+	gridOptions.rowSelection = 'multiple';
 	
 	// 셀 클릭 이벤트
 	gridOptions.onCellClicked = function(event) {
 		if (event.colDef.field != 'mailhfNm')
 			return;
 		
-		fnOpenMailHFPopup('U', event.data.mailhfSq);
+		fnOpenMailHeaderFooterPopup('U', event.data.mailhfSq);
 	}
 	
-	// 조회버튼 - 검색
+	// 조회
 	$('#btnSearch').on('click', function() {
-		var formId = "#searchForm";
-		gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
 	});
 	
 	// 선택삭제
@@ -161,9 +150,8 @@
 					updatedData.push(item);
 				});
 				
-				
 				var jsonData = JSON.stringify(updatedData);
-				gagajf.ajaxJsonSubmit('/marketing/mailtemplate/delete', jsonData, function() {
+				gagajf.ajaxJsonSubmit('/marketing/mail/headerfooter/list/delete', jsonData, function() {
 					$('#btnSearch').trigger('click');
 				});
 			}
@@ -171,20 +159,17 @@
 	});
 	
 	// 등록/상세 팝업
-	var fnOpenMailHFPopup = function(mode, mailhfSq) {
-		var actionUrl = '/marketing/mailtemplate/detail/form' + '?mode=' + mode;
+	var fnOpenMailHeaderFooterPopup = function(mode, mailhfSq) {
+		var actionUrl = '/marketing/mail/headerfooter/detail/form?mode=' + mode;
 		if (!gagajf.isNull(mailhfSq)) actionUrl += '&mailhfSq=' + mailhfSq;
-		cfnOpenModalPopup(actionUrl, 'popupMailHF');
+		cfnOpenModalPopup(actionUrl, 'popupMailHeaderFooter');
 	}
 	
 	$(document).ready(function() {
 		// Create a agGrid
-		gagaAgGrid.createGrid('gridList', gridOptions);		
-		gagaAgGrid.hideStatusBar('gridList');
+		gagaAgGrid.createGrid('gridList', gridOptions);
 	});
-	
 /*]]>*/
 </script>
 
-
 </html>

+ 859 - 0
src/main/webapp/WEB-INF/views/marketing/MailTemplateDetailForm.html

@@ -0,0 +1,859 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MailTemplateDetailForm.html
+ * @desc    : 메일템플릿 상세 팝업
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.05   csh9191     최초 작성
+ * 1.1  2021.05.11   gagamel     전반적 수정
+ *******************************************************************************
+ -->
+<div class="modalPopup" data-width="1200" id="popupMailTemplateDetail">
+	<div class="panelStyle" style="max-height:700px; overflow-y:scroll;">
+		<!-- Title -->
+		<div class="panelTitle">
+			<strong th:text="${'메일템플릿 ' + (mode == 'N' ? '등록' : '상세')}">메일템플릿 등록</strong>
+			<button type="button" class="close" onclick="uifnPopupClose('popupMailTemplateDetail');"><em class="fa fa-times"></em></button>
+		</div>
+		<!-- //Title -->
+		
+		<!-- Content -->
+		<div class="panelContent">
+			<form id="mailTemplateDetailForm" name="mailTemplateDetailForm" action="#" th:action="@{'/marketing/mailtemplate/save'}" th:method="post">
+				<input type="hidden" name="mode" th:value="${mode}"/>
+				
+				<!-- 메일템플릿 -->
+				<table class="frmStyle" aria-describedby="등록/상세폼">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col/>
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>메일템플릿번호<em class="required" title="필수"></em></th>
+							<td>
+								<input type="text" name="mailtSq" maxlength="20" placeholder="자동생성" readonly="readonly" th:value="${mtInfo?.mailtSq}"/>
+							</td>
+						</tr>
+						<tr>
+							<th>메일템플릿구분<em class="required" title="필수"></em></th>
+							<td>
+								<label class="rdoBtn"><input type="radio" name="mailtGb" value="A" th:checked="${mtInfo?.mailtGb == null or mtInfo?.mailtGb == 'A'}" th:readonly="${mode == 'U'}"/>자동메일</label>
+								<label class="rdoBtn"><input type="radio" name="mailtGb" value="M" th:checked="${mtInfo?.mailtGb == 'M'}" th:readonly="${mode == 'U'}"/>마케팅메일</label>
+							</td>
+						</tr>
+						<tr>
+							<th>메일헤더<em class="required" title="필수"></em></th>
+							<td>
+								<select name="mailhSq" required="required" data-valid-name="메일헤더">
+									<option value="">[선택]</option>
+									<option th:if="${mhList}" th:each="oneData, status : ${mhList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|" th:selected="${#strings.toString(mtInfo?.mailhSq) == oneData.cd}"></option>
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>메일푸터<em class="required" title="필수"></em></th>
+							<td>
+								<select name="mailfSq" required="required" data-valid-name="메일푸터">
+									<option value="">[선택]</option>
+									<option th:if="${mfList}" th:each="oneData, status : ${mfList}" th:value="|${oneData.cd}|" th:text="|${oneData.cdNm}|" th:selected="${#strings.toString(mtInfo?.mailfSq) == oneData.cd}"></option>
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>메일템플릿명<em class="required" title="필수"></em></th>
+							<td><input type="text" name="mailtNm" maxlength="100" required="required" data-valid-name="메일템플릿명" th:value="${mtInfo?.mailtNm}"/></td>
+						</tr>
+						<tr>
+							<th>메일내용<em class="required" title="필수"></em></th>
+							<td>
+								<textarea class="textareaR4" id="mailContent" name="mailContent" data-valid-name="내용" th:text="${mtInfo?.mailContent}"></textarea>
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				<!-- //메일템플릿 -->
+			</form>
+		
+			<!-- 상품전시코너 -->
+			<div class="panelStyle" style="margin: unset; display: none;" id="mtcorner">
+				<h4>상품 전시 설정</h4>
+				
+				<div class="inner-panelContent">
+					<div class="panelContent">
+						<ul class="panelBar">
+							<li class="left">
+								<p><span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>상품전시코너는 최대 5개까지 추가할 수 있습니다.</span></p>
+								<p><span class="infoTxt cBlue"><i class="fa fa-info-circle" aria-hidden="true"></i>상품은 전시코너당 최대 40개 까지만 등록할 수 있습니다.</span></p>
+							</li>
+							<li class="right">
+								<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddCorner">상품전시코너 추가</button>
+							</li>
+						</ul>
+						
+						<!-- 코너1 -->
+						<div class="inner-panelContent" style="display: none;" id="mtcorner1">
+							<input type="hidden" name="mailtcSq1">
+							
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%"/>
+										<col width="90%"/>
+									</colgroup>
+									<tr>
+										<th>전시코너1<br/><button type="button" class="btn btn-danger btn-lg" id="btnDeleteCorner1">코너 삭제</button></th>
+										<td>
+											<div class="">
+												<table  class="frmStyle">
+													<tr>
+														<th class="w100">코너명<em class="required" title="필수"></em></th>
+														<td>
+															<input type="text" name="mailtcNm1" maxlength="50"/>
+														</td>
+													</tr>
+													<tr>
+														<th>링크</th>
+														<td>
+															<input type="text" name="mailtcLink1" maxlength="100" value="#"/>
+														</td>
+													</tr>
+													<tr>
+														<th>상품노출기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
+														<td>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr1" value="1"/>1개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr1" value="2"/>2개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr1" value="3" checked="checked"/>3개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr1" value="4"/>4개</label>
+														</td>
+													</tr>
+												</table>
+												
+												<ul class="panelBar">
+													<li>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('mtcgGridOptions1');">상품추가</button>
+														<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteCornerGoods('mtcgGridOptions1');">상품삭제</button>
+													</li>
+												</ul>
+												
+												<div id="mtcgGridList1" style="width:100%; height: 300px;" class="ag-theme-balham"></div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+						<!-- //코너1 -->
+						
+						<!-- 코너2 -->
+						<div class="inner-panelContent" style="display: none;" id="mtcorner2">
+							<input type="hidden" name="mailtcSq2">
+							
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%"/>
+										<col width="90%"/>
+									</colgroup>
+									<tr>
+										<th>전시코너2<br/><button type="button" class="btn btn-danger btn-lg" id="btnDeleteCorner2">코너 삭제</button></th>
+										<td>
+											<div class="">
+												<table  class="frmStyle">
+													<tr>
+														<th class="w100">코너명<em class="required" title="필수"></em></th>
+														<td>
+															<input type="text" name="mailtcNm2" maxlength="50"/>
+														</td>
+													</tr>
+													<tr>
+														<th>링크</th>
+														<td>
+															<input type="text" name="mailtcLink2" maxlength="100" value="#"/>
+														</td>
+													</tr>
+													<tr>
+														<th>상품노출기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
+														<td>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="1"/>1개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="2"/>2개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="3" checked="checked"/>3개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="4"/>4개</label>
+														</td>
+													</tr>
+												</table>
+												
+												<ul class="panelBar">
+													<li>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('mtcgGridOptions2');">상품추가</button>
+														<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteCornerGoods('mtcgGridOptions2');">상품삭제</button>
+													</li>
+												</ul>
+												
+												<div id="mtcgGridList2" style="width:100%; height: 300px;" class="ag-theme-balham"></div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+						<!-- //코너2 -->
+						
+						<!-- 코너3 -->
+						<div class="inner-panelContent" style="display: none;" id="mtcorner3">
+							<input type="hidden" name="mailtcSq3">
+							
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%"/>
+										<col width="90%"/>
+									</colgroup>
+									<tr>
+										<th>전시코너3<br/><button type="button" class="btn btn-danger btn-lg" id="btnDeleteCorner3">코너 삭제</button></th>
+										<td>
+											<div class="">
+												<table  class="frmStyle">
+													<tr>
+														<th class="w100">코너명<em class="required" title="필수"></em></th>
+														<td>
+															<input type="text" name="mailtcNm3" maxlength="50"/>
+														</td>
+													</tr>
+													<tr>
+														<th>링크</th>
+														<td>
+															<input type="text" name="mailtcLink3" maxlength="100" value="#"/>
+														</td>
+													</tr>
+													<tr>
+														<th>상품노출기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
+														<td>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="1"/>1개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="2"/>2개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="3" checked="checked"/>3개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="4"/>4개</label>
+														</td>
+													</tr>
+												</table>
+												
+												<ul class="panelBar">
+													<li>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('mtcgGridOptions3');">상품추가</button>
+														<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteCornerGoods('mtcgGridOptions3');">상품삭제</button>
+													</li>
+												</ul>
+												
+												<div id="mtcgGridList3" style="width:100%; height: 300px;" class="ag-theme-balham"></div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+						<!-- //코너3 -->
+						
+						<!-- 코너4 -->
+						<div class="inner-panelContent" style="display: none;" id="mtcorner4">
+							<input type="hidden" name="mailtcSq4">
+							
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%"/>
+										<col width="90%"/>
+									</colgroup>
+									<tr>
+										<th>전시코너4<br/><button type="button" class="btn btn-danger btn-lg" id="btnDeleteCorner4">코너 삭제</button></th>
+										<td>
+											<div class="">
+												<table  class="frmStyle">
+													<tr>
+														<th class="w100">코너명<em class="required" title="필수"></em></th>
+														<td>
+															<input type="text" name="mailtcNm4" maxlength="50"/>
+														</td>
+													</tr>
+													<tr>
+														<th>링크</th>
+														<td>
+															<input type="text" name="mailtcLink4" maxlength="100" value="#"/>
+														</td>
+													</tr>
+													<tr>
+														<th>상품노출기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
+														<td>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="1"/>1개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="2"/>2개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="3" checked="checked"/>3개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="4"/>4개</label>
+														</td>
+													</tr>
+												</table>
+												
+												<ul class="panelBar">
+													<li>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('mtcgGridOptions4');">상품추가</button>
+														<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteCornerGoods('mtcgGridOptions4');">상품삭제</button>
+													</li>
+												</ul>
+												
+												<div id="mtcgGridList4" style="width:100%; height: 300px;" class="ag-theme-balham"></div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+						<!-- //코너4 -->
+						
+						<!-- 코너5 -->
+						<div class="inner-panelContent" style="display: none;" id="mtcorner5">
+							<input type="hidden" name="mailtcSq5">
+							
+							<div class="panelContent">
+								<table class="frmStyle">
+									<colgroup>
+										<col width="10%"/>
+										<col width="90%"/>
+									</colgroup>
+									<tr>
+										<th>전시코너5<br/><button type="button" class="btn btn-danger btn-lg" id="btnDeleteCorner5">코너 삭제</button></th>
+										<td>
+											<div class="">
+												<table  class="frmStyle">
+													<tr>
+														<th class="w100">코너명<em class="required" title="필수"></em></th>
+														<td>
+															<input type="text" name="mailtcNm5" maxlength="50"/>
+														</td>
+													</tr>
+													<tr>
+														<th>링크</th>
+														<td>
+															<input type="text" name="mailtcLink5" maxlength="100" value="#"/>
+														</td>
+													</tr>
+													<tr>
+														<th>상품노출기준
+															<div class="iconTooltip">
+																<i class="fa fa-info" aria-hidden="true"></i>
+																<span class="left aL" style="width:230px;">
+																	<em>1열에 노출될 상품 개수를 뜻합니다.</em>
+																</span>
+															</div>
+														</th>
+														<td>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="1"/>1개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="2"/>2개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="3" checked="checked"/>3개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="4"/>4개</label>
+														</td>
+													</tr>
+												</table>
+												
+												<ul class="panelBar">
+													<li>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('mtcgGridOptions5');">상품추가</button>
+														<button type="button" class="btn btn-danger btn-lg" onclick="fnDeleteCornerGoods('mtcgGridOptions5');">상품삭제</button>
+													</li>
+												</ul>
+												
+												<div id="mtcgGridList5" style="width:100%; height: 300px;" class="ag-theme-balham"></div>
+											</div>
+										</td>
+									</tr>
+								</table>
+							</div>
+						</div>
+						<!-- //코너5 -->
+					</div> <!-- panelContent -->
+				</div> <!-- end of inner-panelContent -->
+			</div>
+			<!-- //상품전시코너 -->
+			
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" id="btnSaveMailTemplate">저장</button>
+					<button th:if="${mode == 'U'}" type="button" class="btn btn-danger btn-lg" id="btnDeleteMailTemplate">삭제</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+		</div>
+	</div>
+</div>
+
+<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020102902"></script>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=20201030"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	var goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
+	var mtcgGridOptions;
+	var mode = $('#mailTemplateDetailForm input[name=mode]').val();
+	
+	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "상품코드", field: "goodsCd", width: 120, cellClass: 'text-center'},
+		{headerName: "브랜드명", field: "brandNm", width: 150, cellClass: 'text-center'},
+		{headerName: "상품명", field: "goodsNm", width: 200},
+		{
+			headerName: "판매상태", field: "goodsStat", width: 100, cellClass: 'text-center',
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); }
+		},
+		{headerName: "정상가", field: "listPrice", width: 120, cellClass: 'text-center'},
+		{headerName: "판매가", field: "currPrice", width: 120, cellClass: 'text-center'},
+		{headerName: "노출순서", field: "dispOrd", width: 100, cellClass: 'text-center', cellEditor: 'numericCellEditor', editable: true}
+	];
+	
+	var mtcgGridOptions1 = gagaAgGrid.getGridOptions(columnDefs);
+	var mtcgGridOptions2 = gagaAgGrid.getGridOptions(columnDefs);
+	var mtcgGridOptions3 = gagaAgGrid.getGridOptions(columnDefs);
+	var mtcgGridOptions4 = gagaAgGrid.getGridOptions(columnDefs);
+	var mtcgGridOptions5 = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 중복선택
+	mtcgGridOptions1.rowSelection = 'multiple';
+	mtcgGridOptions2.rowSelection = 'multiple';
+	mtcgGridOptions3.rowSelection = 'multiple';
+	mtcgGridOptions4.rowSelection = 'multiple';
+	mtcgGridOptions5.rowSelection = 'multiple';
+
+	// 메일템플릿구분 클릭
+	$('#mailTemplateDetailForm input[name=mailtGb]').on('click', function() {
+		// 등록
+		if (mode == 'N') {
+			if ($(this).val() == 'A') { // 자동메일
+				$('#mtcorner').hide();
+			} else { // 마케팅메일
+				$('#mtcorner').show();
+			}
+		}
+	});
+	
+	// 상품전시코너 추가
+	var cornerIdx = 1;
+	$('#btnAddCorner').on('click', function() {
+		$('#mtcorner' + cornerIdx).show();
+		cornerIdx++;
+		
+		if (cornerIdx > 5) {
+			$('#btnAddCorner').attr('disabled', true);
+		}
+	});
+	
+	// 상품전시코너 삭제
+	$('#btnDeleteCorner1').on('click', function() { fnDeleteCorner($('input[name=mailtcSq1]').val(), 1); });
+	$('#btnDeleteCorner2').on('click', function() { fnDeleteCorner($('input[name=mailtcSq2]').val(), 2); });
+	$('#btnDeleteCorner3').on('click', function() { fnDeleteCorner($('input[name=mailtcSq3]').val(), 3); });
+	$('#btnDeleteCorner4').on('click', function() { fnDeleteCorner($('input[name=mailtcSq4]').val(), 4); });
+	$('#btnDeleteCorner5').on('click', function() { fnDeleteCorner($('input[name=mailtcSq5]').val(), 5); });
+	var fnDeleteCorner = function(mailtcSq, idx) {
+		mcxDialog.confirm("전시코너" + idx + "을(를) 삭제하시겠습니까?<br/>삭제한 내용은 복원할 수 없습니다.", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				switch (idx) {
+					case 1:
+						mtcgGridOptions = mtcgGridOptions1;
+						break;
+					case 2:
+						mtcgGridOptions = mtcgGridOptions2;
+						break;
+					case 3:
+						mtcgGridOptions = mtcgGridOptions3;
+						break;
+					case 4:
+						mtcgGridOptions = mtcgGridOptions4;
+						break;
+					case 5:
+						mtcgGridOptions = mtcgGridOptions5;
+						break;
+				}
+				
+				if (mode == 'N') { // 등록
+					$('input[name=mailtcNm' + idx + ']').val('');
+					$('input[name=mailtcLink' + idx + ']').val('');
+					mtcgGridOptions.api.setRowData({});
+				} else { // 상세
+					gagajf.ajaxJsonSubmit('/marketing/mailtemplate/corner/delete/' + mailtcSq, null, function() {
+						$('input[name=mailtcNm' + idx + ']').val('');
+						$('input[name=mailtcLink' + idx + ']').val('');
+						mtcgGridOptions.api.setRowData({});
+					});
+				}
+				
+				$('#mtcorner' + idx).hide();
+			}
+		});
+	}
+	
+	// 상품추가 팝업
+	var fnOpenGoodsPopup = function(gridOption) {
+		switch (gridOption) {
+			case 'mtcgGridOptions1': 
+				mtcgGridOptions = mtcgGridOptions1;
+				break;
+			case 'mtcgGridOptions2' : 
+				mtcgGridOptions = mtcgGridOptions2;
+				break;
+			case 'mtcgGridOptions3' : 
+				mtcgGridOptions = mtcgGridOptions3;
+				break;
+			case 'mtcgGridOptions4' : 
+				mtcgGridOptions = mtcgGridOptions4;
+				break;
+			case 'mtcgGridOptions5' : 
+				mtcgGridOptions = mtcgGridOptions5;
+				break;
+		}
+		
+		cfnOpenGoodsPopup('fnSetMailTemplateCornerGoods');
+	}
+	
+	// 상품추가 팝업에서 호출되는 콜백함수
+	var fnSetMailTemplateCornerGoods = function(goodsData) {
+		if (goodsData.length < 1) return;
+		
+		// 기존상품건수
+		var totCnt = gagaAgGrid.getTotalCount(mtcgGridOptions);
+		
+		// 상품개수 제한
+		if (totCnt > 40) {
+			mcxDialog.alert('등록된 상품이 40개로서 더 이상 추가할 수 없습니다.');
+			return false;
+		}
+		
+		$.each(goodsData, function(idx, item) {
+			var isExist = false;
+			
+			mtcgGridOptions.api.forEachNode(function(rowNode, index) {
+				// 중복상품 여부 확인
+				if (item.goodsCd == rowNode.data.goodsCd) {
+					isExist = true;
+					return false;
+				}
+			});
+			
+			// 중복되지 않았으면
+			if (!isExist) {
+				totCnt = gagaAgGrid.getTotalCount(mtcgGridOptions);
+				
+				// 상품개수 제한에 걸리지 않았으면
+				if (totCnt <= 40) {
+					var data = {
+						goodsCd : item.goodsCd,
+						brandNm : item.brandEnm,
+						goodsNm : item.goodsNm,
+						goodsStat : item.goodsStat,
+						listPrice : item.listPrice,
+						currPrice : item.currPrice,
+						dispOrd : totCnt + 1
+					};
+					
+					// 그리드 마지막에 추가
+					mtcgGridOptions.api.updateRowData({add: [data], addIndex: idx});
+					mtcgGridOptions.api.refreshCells();
+				}
+			}
+		});
+	}
+	
+	// 코너상품 삭제
+	var fnDeleteCornerGoods = function(gridOption) {
+		switch (gridOption) {
+			case 'mtcgGridOptions1': 
+				mtcgGridOptions = mtcgGridOptions1;
+				break;
+			case 'mtcgGridOptions2' : 
+				mtcgGridOptions = mtcgGridOptions2;
+				break;
+			case 'mtcgGridOptions3' : 
+				mtcgGridOptions = mtcgGridOptions3;
+				break;
+			case 'mtcgGridOptions4' : 
+				mtcgGridOptions = mtcgGridOptions4;
+				break;
+			case 'mtcgGridOptions5' : 
+				mtcgGridOptions = mtcgGridOptions5;
+				break;
+		}
+		
+		var selectedData = gagaAgGrid.selectedRowData(mtcgGridOptions);
+		if (selectedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return false;
+		}
+		
+		mcxDialog.confirm('선택된 상품을 삭제하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				// 화면에서 삭제
+				var removedData = gagaAgGrid.removeRowData(mtcgGridOptions, false);
+				
+				if (mode == 'U') { // 수정모드
+					var jsonData = JSON.stringify(removedData);
+	 				gagajf.ajaxJsonSubmit('/marketing/mailtemplate/goods/list/delete', jsonData);
+				}
+			}
+		});
+	}
+
+	// 메일템플릿 저장
+	$('#btnSaveMailTemplate').on('click', function() {
+		// 입력 값 체크
+		if (!gagajf.validation('#mailTemplateDetailForm')) {
+			return false;
+		}
+		
+		if ($('#mailTemplateDetailForm input[name=mailtNm]').val().length < 2) {
+			mcxDialog.alert('메일템플릿명은 2자 이상 50자 미만으로 입력해 주세요.');
+			return false;
+		}
+		
+		if (gagajf.isNull($('#mailContent').val())) {
+			mcxDialog.alert('메일내용을 입력해 주세요.');
+			return false;
+		}
+		
+		var mailtcList = [];
+		
+		// 마케팅메일 체크
+		if ($('#mailTemplateDetailForm input:radio[name=mailtGb]:checked').val() == 'M') {
+			if ($('#mtcorner1').is(':visible')) {
+				if (!fnCheckCornerGoods(mtcgGridOptions1, 1)) {
+					return false;
+				}
+				
+				var mailtc = {
+					mailtcSq : $('input[name=mailtcSq1]').val(),
+					mailtSq : $('#mailTemplateDetailForm input[name=mailtSq]').val(),
+					mailtcNm : $('input[name=mailtcNm1]').val(),
+					mailtcLink : $('input[name=mailtcLink1]').val(),
+					goodsCpr : $('input:radio[name=goodsCpr1]:checked').val(),
+					mailtcGoodsList : gagaAgGrid.getAllRowData(mtcgGridOptions1)
+				};
+				mailtcList.push(mailtc);
+			}
+			
+			if ($('#mtcorner2').is(':visible')) {
+				if (!fnCheckCornerGoods(mtcgGridOptions2, 2)) {
+					return false;
+				}
+				
+				var mailtc = {
+					mailtcSq : $('input[name=mailtcSq2]').val(),
+					mailtSq : $('#mailTemplateDetailForm input[name=mailtSq]').val(),
+					mailtcNm : $('input[name=mailtcNm2]').val(),
+					mailtcLink : $('input[name=mailtcLink2]').val(),
+					goodsCpr : $('input:radio[name=goodsCpr2]:checked').val(),
+					mailtcGoodsList : gagaAgGrid.getAllRowData(mtcgGridOptions2)
+				};
+				mailtcList.push(mailtc);
+			}
+			
+			if ($('#mtcorner3').is(':visible')) {
+				if (!fnCheckCornerGoods(mtcgGridOptions3, 3)) {
+					return false;
+				}
+				
+				var mailtc = {
+					mailtcSq : $('input[name=mailtcSq3]').val(),
+					mailtSq : $('#mailTemplateDetailForm input[name=mailtSq]').val(),
+					mailtcNm : $('input[name=mailtcNm3]').val(),
+					mailtcLink : $('input[name=mailtcLink3]').val(),
+					goodsCpr : $('input:radio[name=goodsCpr3]:checked').val(),
+					mailtcGoodsList : gagaAgGrid.getAllRowData(mtcgGridOptions3)
+				};
+				mailtcList.push(mailtc);
+			}
+			
+			if ($('#mtcorner4').is(':visible')) {
+				if (!fnCheckCornerGoods(mtcgGridOptions4, 4)) {
+					return false;
+				}
+				
+				var mailtc = {
+					mailtcSq : $('input[name=mailtcSq4]').val(),
+					mailtSq : $('#mailTemplateDetailForm input[name=mailtSq]').val(),
+					mailtcNm : $('input[name=mailtcNm4]').val(),
+					mailtcLink : $('input[name=mailtcLink4]').val(),
+					goodsCpr : $('input:radio[name=goodsCpr4]:checked').val(),
+					mailtcGoodsList : gagaAgGrid.getAllRowData(mtcgGridOptions4)
+				};
+				mailtcList.push(mailtc);
+			}
+			
+			if ($('#mtcorner5').is(':visible')) {
+				if (!fnCheckCornerGoods(mtcgGridOptions5, 5)) {
+					return false;
+				}
+				
+				var mailtc = {
+					mailtcSq : $('input[name=mailtcSq5]').val(),
+					mailtSq : $('#mailTemplateDetailForm input[name=mailtSq]').val(),
+					mailtcNm : $('input[name=mailtcNm5]').val(),
+					mailtcLink : $('input[name=mailtcLink5]').val(),
+					goodsCpr : $('input:radio[name=goodsCpr5]:checked').val(),
+					mailtcGoodsList : gagaAgGrid.getAllRowData(mtcgGridOptions5)
+				};
+				mailtcList.push(mailtc);
+			}
+		}
+		
+		mcxDialog.confirm("메일템플릿을 저장하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var mailt = {};
+				
+				mailt.mailtSq = $('#mailTemplateDetailForm input[name=mailtSq]').val();
+				mailt.mailtGb = $('#mailTemplateDetailForm input:radio[name=mailtGb]:checked').val();
+				mailt.mailhSq = $('#mailTemplateDetailForm select[name=mailhSq]').val();
+				mailt.mailfSq = $('#mailTemplateDetailForm select[name=mailfSq]').val();
+				mailt.mailtNm = $('#mailTemplateDetailForm input[name=mailtNm]').val();
+				mailt.mailContent = $('#mailTemplateDetailForm textarea[name=mailContent]').val();
+				mailt.mailtcList = mailtcList;
+				
+				var jsonData = JSON.stringify(mailt);
+				gagajf.ajaxJsonSubmit($('#mailTemplateDetailForm').prop('action'), jsonData, function() {
+					uifnPopupClose('popupMailTemplateDetail');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	// 전시코너상품 체크
+	var fnCheckCornerGoods = function(gridOptions, idx) {
+		if (gagajf.isNull($('input[name=mailtcNm' + idx + ']').val())) {
+			mcxDialog.alert('코너명을 입력해 주세요.');
+			return false;
+		}
+		
+		var totCnt = gagaAgGrid.getTotalCount(gridOptions);
+		
+		if (totCnt == 0) {
+			mcxDialog.alert('[상품추가] 버튼을 클릭해 전시코너의 상품을 등록해 주세요.');
+			return false;
+		}
+		
+		return true;
+	}
+	
+	// 메일템플릿 삭제
+	$('#btnDeleteMailTemplate').on('click', function() {
+		mcxDialog.confirm("정말 메일템플릿을 삭제하시겠습니까?", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				var actionUrl = '/marketing/mailtemplate/delete/' + $('input[name=mailtSq]').val();
+				gagajf.ajaxJsonSubmit(actionUrl, null, function() {
+					uifnPopupClose('popupMailTemplateDetail');
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	// 상품전시코너 조회
+	var fnGetMailTemplateCorner = function() {
+		$.getJSON('/marketing/mailtemplate/corner/list/' + $('#mailTemplateDetailForm input[name=mailtSq]').val()
+			, function(result) {
+				// 데이터 개수
+				var dataCnt = result.length;
+				
+				if (dataCnt > 0) {
+					$.each(result, function(idx, item) {
+						$('input[name=mailtcSq' + (idx+1) + ']').val(item.mailtcSq);
+						$('input[name=mailtcNm' + (idx+1) + ']').val(item.mailtcNm);
+						$('input[name=mailtcLink' + (idx+1) + ']').val(item.mailtcLink);
+						$('input:radio[name=goodsCpr' + (idx+1) + ']:radio[value="' + item.goodsCpr + '"]').prop('checked', true);
+						$('#mtcorner' + (idx+1)).show();
+						
+						switch (idx) {
+							case 0:
+								mtcgGridOptions1.api.setRowData(item.mailtcGoodsList);
+								break;
+							case 1:
+								mtcgGridOptions2.api.setRowData(item.mailtcGoodsList);
+								break;
+							case 2:
+								mtcgGridOptions3.api.setRowData(item.mailtcGoodsList);
+								break;
+							case 3:
+								mtcgGridOptions4.api.setRowData(item.mailtcGoodsList);
+								break;
+							case 4:
+								mtcgGridOptions5.api.setRowData(item.mailtcGoodsList);
+								break;
+						}
+					});
+				}
+			});
+	}
+	
+	$(document).ready(function() {
+		// Create a summernote
+		let snOptions = gagaSn.getToolbarOptions();
+		gagaSn.createSummernote(snOptions, '#mailContent');
+		
+		gagaAgGrid.createGrid("mtcgGridList1", mtcgGridOptions1);
+		gagaAgGrid.createGrid("mtcgGridList2", mtcgGridOptions2);
+		gagaAgGrid.createGrid("mtcgGridList3", mtcgGridOptions3);
+		gagaAgGrid.createGrid("mtcgGridList4", mtcgGridOptions4);
+		gagaAgGrid.createGrid("mtcgGridList5", mtcgGridOptions5);
+		
+		// Hide status bar
+		gagaAgGrid.hideStatusBar('mtcgGridList1');
+		gagaAgGrid.hideStatusBar('mtcgGridList2');
+		gagaAgGrid.hideStatusBar('mtcgGridList3');
+		gagaAgGrid.hideStatusBar('mtcgGridList4');
+		gagaAgGrid.hideStatusBar('mtcgGridList5');
+		
+		// 수정모드이고 마케팅메일일 때 
+		if (mode == 'U' && $('#mailTemplateDetailForm input:radio[name=mailtGb]:checked').val() == 'M') {
+			$('#mtcorner').show(); // 상품전시코너 영역 노출
+			fnGetMailTemplateCorner(); // 상품전시코너 조회
+		}
+	});
+/*]]>*/
+</script>
+
+</html>

+ 202 - 0
src/main/webapp/WEB-INF/views/marketing/MailTemplateForm.html

@@ -0,0 +1,202 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MailTemplateForm.html
+ * @desc    : 메일템플릿관리
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.05   csh9191     최초 작성
+ * 1.1  2021.05.11   gagamel     전반적 수정
+ *******************************************************************************
+ -->
+	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+
+		<!-- 검색조건 영역 -->
+		<div class="panelStyle">
+			<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/mailtemplate/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+				<table class="frmStyle" aria-describedby="검색조건">
+					<colgroup>
+						<col style="width:10%;"/>
+						<col style="width:15%;"/>
+						<col style="width:10%;"/>
+						<col style="width:10%;"/>
+						<col style="width:10%;"/>
+						<col/>
+						<col style="width:10%;"/>
+						<col style="width:10%;"/>
+					</colgroup>
+					<tr>
+						<th>메일템플릿구분</th>
+						<td>
+							<select name="mailtGb">
+								<option value="">[전체]</option>
+								<option value="A">[A] 자동메일</option>
+								<option value="M">[M] 마케팅메일</option>
+							</select>
+						</td>
+						<th>메일템플릿번호</th>
+						<td>
+							<input type="text" name="mailtSq" placeholder="" maxlength="10" data-valid-type="numeric"/>
+						</td>
+						<th>메일템플릿명</th>
+						<td>
+							<input type="text" name="mailtNm" placeholder="" maxlength="50"/>
+						</td>
+						<th>사용여부</th>
+						<td>
+							<select name="useYn">
+								<option value="">[전체]</option>
+								<option value="Y" selected="selected">[Y] Yes</option>
+								<option value="N">[N] No</option>
+							</select>
+						</td>
+					</tr>
+				</table>
+				
+				<ul class="panelBar">
+					<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();">초기화</button>
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- //검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<!-- 버튼 배치 영역 -->
+			<ul class="panelBar">
+				<li class="right">
+					<button type="button" class="btn btn-info btn-lg" onclick="fnOpenMailTemplateDetailPopup('N');">메일템플릿등록</button>
+					<button type="button" class="btn btn-danger btn-lg" id="btnDelete">삭제</button>
+				</li>
+			</ul>
+			<!-- //버튼 배치 영역 -->
+			
+			<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+	</div>
+
+<script th:inline="javascript">
+/*<![CDATA[*/
+	//메일구분
+	let mailtGb = {"M" :"마케팅메일", "A":"자동메일"};
+	
+	var columnDefs = [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "메일템플릿번호", field: "mailtSq", width: 150, cellClass: 'text-center'},
+		{
+			headerName: "메일템플릿구분", field: "mailtGb", width: 150, cellClass: 'text-center',
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(mailtGb, params.value); }
+		},
+		{
+			headerName: "메일템플릿명", field: "mailtNm", width: 350,
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{
+			headerName: "미리보기", field:"preview", width: 100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<button="javascript:void(0);" class="btn btn-info btn-sm">미리보기</button>'; }
+		},
+		{headerName: "사용여부", field: "useYn", width: 100, cellClass: 'text-center'},
+		{headerName: "등록자", field: "regNm", width: 100, cellClass: 'text-center'},
+		{
+			headerName: "등록일시", field: "regDt", width: 150, cellClass: 'text-center',
+			cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
+		},
+		{
+			headerName: "수정자", field: "updNm", width: 100, cellClass: 'text-center'},
+		{
+			headerName: "수정일시", field: "updDt", width: 150, cellClass: 'text-center', 
+			cellRenderer: function(params) { return gagaAgGrid.toDateTimeFormat(params.value); }
+		}
+	];
+	
+	// Get GridOptions
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+	
+	// 다중 선택
+	gridOptions.rowSelection = 'multiple';
+	
+	// 셀 클릭 시
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field == 'mailtNm'){
+			// 메일템플릿 상세 팝업
+			fnOpenMailTemplateDetailPopup('U', event.data.mailtSq);
+		} else if (event.colDef.field == 'preview') {
+			// 메일템플릿 미리보기 팝업
+			fnOpenMailPreviewPopup(event.data.mailtSq);
+		}
+	}
+	
+	// 조회
+	$('#btnSearch').on('click', function() {
+		gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+	});
+	
+	// 선택삭제
+	$('#btnDelete').on('click', function() {
+		var removedData = gagaAgGrid.removeRowData(gridOptions);
+		
+		if (removedData.length == 0) {
+			mcxDialog.alert('선택된 행이 없습니다.');
+			return;
+		}
+		
+		mcxDialog.confirm("삭제하시겠습니까?", {
+			sureBtnText: "확인",
+			cancelBtnText: "취소",
+			sureBtnClick: function() {
+				// delete 대신 update 처리해야 하므로 다음과 같이 useYn 값으로 처리
+				var updatedData = [];
+				
+				$.each(removedData, function(idx, item) {
+					item.useYn = 'N';
+					updatedData.push(item);
+				});
+				
+				var jsonData = JSON.stringify(updatedData);
+				gagajf.ajaxJsonSubmit('/marketing/mailtemplate/list/delete', jsonData, function() {
+					$('#btnSearch').trigger('click');
+				});
+			}
+		});
+	});
+	
+	// 등록/상세 팝업
+	var fnOpenMailTemplateDetailPopup = function(mode, mailtSq) {
+		var actionUrl = '/marketing/mailtemplate/detail/form' + '?mode=' + mode;
+		if (!gagajf.isNull(mailtSq)) actionUrl += '&mailtSq=' + mailtSq;
+		cfnOpenModalPopup(actionUrl, 'popupMailTemplateDetail');
+	}
+	
+	// 미리보기
+	var fnOpenMailPreviewPopup = function(mailtSq) {
+		var actionUrl = '/marketing/mailtemplate/preview/form/' + mailtSq;
+		cfOpenWindowPopup(actionUrl, 'popupMailTemplatePreview', 900, 900);
+	}
+	
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+	});
+/*]]>*/
+
+</script>
+</html>

+ 34 - 0
src/main/webapp/WEB-INF/views/marketing/MailTemplatePreviewForm.html

@@ -0,0 +1,34 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="ko"
+	xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : MktmailmanagementPreviewForm.html
+ * @desc    : MktmailmanagementPreviewForm MKT메일 미리보기 화면
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021. 02. 19   csh9191     최초 작성
+ *******************************************************************************
+ -->
+<head>
+	<title>::메일템플릿 미리보기::</title>
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+</head>
+
+<body>
+	<!-- 메일템플릿 헤더 -->
+	<th:block th:utext="${previewInfo.mailhContent}"></th:block>
+	
+	<!-- 메일템플릿 내용 -->
+	<th:block th:utext="${previewInfo.mailContent}"></th:block>
+	
+	<!-- 메일템플릿 푸터 -->
+	<th:block th:utext="${previewInfo.mailfContent}"></th:block>
+</body>
+</html>

+ 0 - 1078
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html

@@ -1,1078 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : MktmailmanagementDetailForm.html
- * @desc    : MktmailmanagementDetailForm 등록/수정 상세 팝업화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021. 02. 05   csh9191     최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1200" id="popupMktMail">
-	<div class="panelStyle" style="max-height:700px;overflow-y:scroll;">
-		<!-- 팝업창 타이틀 -->
-		<div class="panelTitle">
-			<strong th:text="${'이메일' + (mode == 'N' ? '등록' : '상세')}">이메일</strong>
-			<button type="button" class="close" onclick="uifnPopupClose('popupMktMail');"><em class="fa fa-times"></em></button>
-		</div>
-		<!-- 팝업창 타이틀 -->
-		
-		<!-- 팝업창 상단부분 시작-->
-		<div class="panelContent">
-			<form id="mailManagementForm" name="mailManagementForm" action="#" th:action="@{'/marketing/mktMailManagement/save'}" th:method="post">
-				<input type="hidden" name="mode" th:value="${mode}"/>
-				
-				<table class="frmStyle" aria-describedby="">
-					<colgroup>
-						<col style="width:10%;"/>
-						<col/>
-					</colgroup>
-					<tbody>
-						<tr>
-							<th>메일번호</th>
-							<td class="left"  th:if="${mode  == 'N' }">
-								<input type="text" name="mailtSq" maxlength="20" placeholder="자동생성" readonly="readonly"/>
-							</td>
-							<td class="left"  th:if="${mode  == 'U' }">
-								<input type="text" name="mailtSq" maxlength="20" placeholder="자동생성" readonly="readonly"/>
-							</td>
-							
-						</tr>
-						<tr>
-							<th>메일구분</th>
-							<td>
-								<label class="rdoBtn"><input type="radio" name="mailtGb" value="M" checked="checked"/>마케팅</label>
-								<label class="rdoBtn"><input type="radio" name="mailtGb" value="A"/>자동</label>
-							</td>
-						</tr>
-						<tr>
-							<th>헤더</th>
-							<td>
-								<select name="mailHsq">
-									<option value="0">선택하기 ▼</option>
-									<option th:if="${mailHsqList}" th:each="oneData, status : ${mailHsqList}" th:value="|${oneData.mailhfSq}|" th:text="|${oneData.mailhfNm}|"></option>
-								</select>
-							</td>
-						</tr>
-						<tr>
-							<th>푸터</th>
-							<td>
-								<select name="mailFsq">
-										<option value="0">선택하기 ▼</option>
-										<option th:if="${mailFsqList}" th:each="oneData, status : ${mailFsqList}" th:value="|${oneData.mailhfSq}|" th:text="|${oneData.mailhfNm}|"></option>
-								</select>
-							</td>
-						</tr>
-						<tr>
-							<th>타이틀<em class="required" title="필수"></em></th>
-							<td><input type="text" name="mailtNm" maxlength="50" required="required" data-valid-name="타이틀" /></td>
-						</tr>
-						
-						<tr>
-							<th>HTML / 이미지 설정<em class="required" title="필수"></em></th>
-							<td>
-								<textarea class="textareaR4" id="mailContent" name="mailContent" data-valid-name="내용"></textarea>
-							</td>
-						</tr>
-					</tbody>
-					
-				</table>
-		<!-- 팝업창 상단부분 끝-->
-		
-		<!-- 팡업창 하단부분 시작 -->
-		
-		<div class="panelStyle" style="margin:unset;">
-				<!-- TITLE -->
-				<div class="panelTitle">
-					<h2>상품 전시 설정</h2>
-					<span class="panelControl">
-						<i class="fa inner-fa-chevron-up"></i>    <!-- 열림/닫힘 화살표 -->
-					</span>
-				</div>
-				<!-- //상품 전시 설정 -->
-				<div class="inner-panelContent">
-					<div class="panelContent">
-					<ul class="panelBar">
-						<li class="left">
-							<p>최대 5개 까지 상품 전시 구분을 추가하실 수 있습니다.</p>
-							<p>상품은 구분자 당 최대 40 개 까지만 등록하실 수 있습니다.</p>
-						</li>
-						<li class="right">
-							<button type="button" class="btn btnRight btn-success btn-lg" id="btnAddGrid">구분추가하기</button>
-						</li>
-					</ul>
-						<!-- 구분 1 -->
-						<div class="inner-panelContent" id="btnAddGridNum" style="display:none;">
-							<input type="hidden" name="mailtcSq" th:value="${mailtcSq}">
-							<div class="panelContent">
-								<table class="frmStyle">
-									<colgroup>
-										<col width="10%"/>
-										<col width="90%"/>
-									</colgroup>
-									<tr>
-										<th>상품 구분 1<br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum('');">구분 삭제</button>
-										</th>
-										<td>
-											<div class="">
-												<table  class="frmStyle">
-													<tr>
-														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
-														<td>
-															<input type="text" name="mailtcNm" maxlength="50"/>
-														</td>
-													</tr>
-													<tr>
-														<th>링크</th>
-														<td>
-															<input type="text" name="mailtcLink"/>
-														</td>
-													</tr>
-													<tr>
-														<th>상품 노출 기준
-															<div class="iconTooltip">
-																<i class="fa fa-info" aria-hidden="true"></i>
-																<span class="left aL" style="width:230px;">
-																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
-																</span>
-															</div>
-														</th>
-														<td>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="1"/>1개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="2"/>2개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="3" checked/>3개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr" value="4"/>4개</label>
-														</td>
-													</tr>
-												</table>
-												<ul class="panelBar">
-													<li class="left">
-														<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow('gridOptions_c1');">상품삭제</button>
-													</li>
-													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('gridOptions_c1');">상품추가</button>
-													</li>													
-												</ul>
-												<!-- Agrid -->
-												<div id="gridSectionGbList1" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
-										</td>
-									</tr>
-								</table>
-							</div>
-						</div>
-						<!-- 구분 1 -->
-						
-						<!-- 구분2 -->
-						<div class="inner-panelContent" id="btnAddGridNum2" style="display:none;">
-							<input type="hidden" name="mailtSq" th:value="${mailtSq}">
-							<div class="panelContent">
-								<table class="frmStyle">
-									<colgroup>
-										<col width="10%"/>
-										<col width="90%"/>
-									</colgroup>
-									<tr>
-										<th>상품 구분 2<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum2();">구분 삭제</button>
-										</th>
-										<td>
-											<div class="">
-												<table  class="frmStyle">
-													<tr>
-														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
-														<td>
-															<input type="text" name="mailtcNm2" maxlength="50"/>
-														</td>
-													</tr>
-													<tr>
-														<th>링크</th>
-														<td>
-															<input type="text" name="mailtcLink2"/>
-														</td>
-													</tr>
-													<tr>
-														<th>상품 노출 기준
-															<div class="iconTooltip">
-																<i class="fa fa-info" aria-hidden="true"></i>
-																<span class="left aL" style="width:230px;">
-																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
-																</span>
-															</div>
-														</th>
-														<td>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="1"/>1개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="2"/>2개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="3" checked/>3개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr2" value="4"/>4개</label>
-														</td>
-													</tr>
-												</table>
-												<ul class="panelBar">
-													<li class="left">
-														<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow('gridOptions_c2');">상품삭제</button>
-													</li>
-													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('gridOptions_c2');">상품추가</button>
-													</li>													
-												</ul>
-												<!-- Agrid -->
-												<div id="gridSectionGbList2" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
-										</td>
-									</tr>
-								</table>
-							</div>
-						</div>
-						<!-- 구분2  -->
-						
-						<!-- 구분3 -->
-						<div class="inner-panelContent" id="btnAddGridNum3" style="display:none;">
-							<input type="hidden" name="mailtcSq3" th:value="${mailtcSq}">
-							<div class="panelContent">
-								<table class="frmStyle">
-									<colgroup>
-										<col width="10%"/>
-										<col width="90%"/>
-									</colgroup>
-									<tr>
-										<th>상품 구분 3<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum3();">구분 삭제</button>
-										</th>
-										<td>
-											<div class="">
-												<table  class="frmStyle">
-													<tr>
-														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
-														<td>
-															<input type="text" name="mailtcNm3" maxlength="50"/>								
-														</td>
-													</tr>
-													<tr>
-														<th>링크</th>
-														<td>
-															<input type="text" name="mailtcLink3"/>								
-														</td>
-													</tr>
-													<tr>
-														<th>상품 노출 기준
-															<div class="iconTooltip">
-																<i class="fa fa-info" aria-hidden="true"></i>
-																<span class="left aL" style="width:230px;">
-																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
-																</span>
-															</div>
-														</th>
-														<td>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="1"/>1개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="2"/>2개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="3" checked/>3개</label>						
-															<label class="rdoBtn"><input type="radio" name="goodsCpr3" value="4"/>4개</label>
-														</td>
-													</tr>
-												</table>
-												<ul class="panelBar">
-													<li class="left">
-														<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow('gridOptions_c3');">상품삭제</button>
-													</li>
-													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('gridOptions_c3');">상품추가</button>
-													</li>													
-												</ul>
-												<!-- Agrid -->
-												<div id="gridSectionGbList3" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
-										</td>
-									</tr>
-								</table>
-							</div>
-						</div>
-						<!-- 구분3 -->
-						
-						<!-- 구분4 -->
-						<div class="inner-panelContent" id="btnAddGridNum4" style="display:none;">
-							<input type="hidden" name="mailtcSq4" th:value="${mailtcSq}">
-							<div class="panelContent">
-								<table class="frmStyle">
-									<colgroup>
-										<col width="10%"/>
-										<col width="90%"/>
-									</colgroup>
-									<tr>
-										<th>상품 구분 4<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum4();">구분 삭제</button>
-										</th>
-										<td>
-											<div class="">
-												<table  class="frmStyle">
-													<tr>
-														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
-														<td>
-															<input type="text" name="mailtcNm4" maxlength="50"/>								
-														</td>
-													</tr>
-													<tr>
-														<th>링크</th>
-														<td>
-															<input type="text" name="mailtcLink4"/>								
-														</td>
-													</tr>
-													<tr>
-														<th>상품 노출 기준
-															<div class="iconTooltip">
-																<i class="fa fa-info" aria-hidden="true"></i>
-																<span class="left aL" style="width:230px;">
-																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
-																</span>
-															</div>
-														</th>
-														<td>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="1"/>1개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="2"/>2개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="3" checked/>3개</label>						
-															<label class="rdoBtn"><input type="radio" name="goodsCpr4" value="4"/>4개</label>
-														</td>
-													</tr>
-												</table>
-												<ul class="panelBar">
-													<li class="left">
-														<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow('gridOptions_c4');">상품삭제</button>
-													</li>
-													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('gridOptions_c4');">상품추가</button>
-													</li>													
-												</ul>
-												<!-- Agrid -->
-												<div id="gridSectionGbList4" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
-										</td>
-									</tr>
-								</table>
-							</div>
-						</div>
-						<!-- 구분4 -->
-						
-						<!-- 구분5 -->
-						<div class="inner-panelContent" id="btnAddGridNum5" style="display:none;">
-						<input type="hidden" name="mailtcSq5" th:value="${mailtcSq}">
-							<div class="panelContent">
-								<table class="frmStyle">
-									<colgroup>
-										<col width="10%"/>
-										<col width="90%"/>
-									</colgroup>
-									<tr>
-										<th>상품 구분 5<br><br>
-											<button type="button" class="btn btn-danger btn-lg" id="" onclick="btnDeleteGridNum5();">구분 삭제</button>
-										</th>
-										<td>
-											<div class="">
-												<table  class="frmStyle">
-													<tr>
-														<th class="w100">구분자 명<em class="required" title="필수"></em></th>
-														<td>
-															<input type="text" name="mailtcNm5" maxlength="50"/>								
-														</td>
-													</tr>
-													<tr>
-														<th>링크</th>
-														<td>
-															<input type="text" name="mailtcLink5"/>								
-														</td>
-													</tr>
-													<tr>
-														<th>상품 노출 기준
-															<div class="iconTooltip">
-																<i class="fa fa-info" aria-hidden="true"></i>
-																<span class="left aL" style="width:230px;">
-																	<em>1열 에 노출될 상품 개수를 뜻합니다.</em>
-																</span>
-															</div>
-														</th>
-														<td>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="1"/>1개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="2"/>2개</label>
-															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="3" checked/>3개</label>						
-															<label class="rdoBtn"><input type="radio" name="goodsCpr5" value="4"/>4개</label>
-														</td>
-													</tr>
-												</table>
-												<ul class="panelBar">
-													<li class="left">
-														<button type="button" class="btn btn-danger btn-lg" onclick="fnGoodsDeleteRow('gridOptions_c5');">상품삭제</button>
-													</li>
-													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup('gridOptions_c5');">상품추가</button>
-													</li>													
-												</ul>
-												<!-- Agrid -->
-												<div id="gridSectionGbList5" style="width:100%; height:200px;" class="ag-theme-balham"></div>
-											</div>
-										</td>
-									</tr>
-								</table>
-							</div>
-						</div>
-						<!-- 구분5 -->
-					
-						
-					</div> <!-- panelContent -->
-				</div> <!-- end of inner-panelContent -->
-			</div>
-			<!-- 팡업창 하단부분 끝 -->
-
-		<!-- 버튼 배치 영역 -->
-		<ul class="panelBar">
-			<li class="left"  th:if="${mode  == 'U' }">
-				<button type="button" class="btn btn-danger btn-lg" id="btndeleteMktmail">삭제</button>
-			</li>
-			<li class="right">
-				<button type="button" class="btn btn-info btn-lg" id="btnSaveMktMail">저장</button>
-			</li>
-		</ul>
-		<!-- //버튼 배치 영역 -->
-				</form>
-		</div>
-	</div>
-</div>
-
-<script type="text/javascript" src="/ux/plugins/summernote/summernote.js?v=2020102902"></script>
-<script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=20201030"></script>
-<script th:inline="javascript">
-/*<![CDATA[*/
-		let AddgridRow;		
-		let mode = [[${mode}]]; 
-		let mktmailInfo = [[${mktmailInfo}]];
-		let mktmailTCInfo = [[${mktmailTCInfo}]];
-		let goodsStatList = gagajf.convertToArray([[${goodsStatList}]]);
-		
-		//팝업창 삭제버튼
-		$('#btndeleteMktmail').on('click', function() {
-			mcxDialog.confirm("등록하신 내용을 삭제하시겠습니까?<br>삭제한 내용은 복원하실 수 없습니다.", {
-				cancelBtnText: "취소",
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					
-					var deleteData = [];
-					var corner = {};
-					
-					corner.mailtSq = $('#mailManagementForm input[name=mailtSq]').val();
-					corner.useYn = 'N';
-					deleteData.push(corner);
-					
-					console.log(deleteData);
-					
-					var jsonData = JSON.stringify(deleteData);
-					
-					gagajf.ajaxJsonSubmit('/marketing/mktmailManagement/delete', jsonData, function() {
-						uifnPopupClose('popupMktMail');
-						$('#btnSearch').trigger('click');
-					});
-				}
-			});
-		});
-		
-		//그리드 그리기
-		var columnDefs = [
-			{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-			{headerName: "Product ID", field: "goodsCd" , width: 120, cellClass: 'text-center'},
-			{headerName: "브랜드명", field: "brandEnm" , width: 200, cellClass: 'text-center'},
-			{headerName: "상품명", field: "goodsNm" , width: 200, cellClass: 'text-center'},
-			{headerName: "판매상태", field: "goodsStat" , width: 100, cellClass: 'text-center',
-				cellEditorParams: { values: gagaAgGrid.extractValues(goodsStatList) },
-				valueFormatter: function (params) { return gagaAgGrid.lookupValue(goodsStatList, params.value); },
-				valueParser: function (params) { return gagaAgGrid.lookupKey(goodsStatList, params.newValue); }
-			},
-			{headerName: "정상가", field: "listPrice" , width: 120, cellClass: 'text-center'},
-			{headerName: "판매가", field: "listPrice" , width: 120, cellClass: 'text-center'},
-			{headerName: "순번", field: "dispOrd" , width: 120, cellClass: 'text-center',cellEditor: 'numericCellEditor'}
-		];
-		
-		
-		// Add on options
-		var gridOptions_c1 = gagaAgGrid.getGridOptions(columnDefs);
-		var gridOptions_c2 = gagaAgGrid.getGridOptions(columnDefs);
-		var gridOptions_c3 = gagaAgGrid.getGridOptions(columnDefs);
-		var gridOptions_c4 = gagaAgGrid.getGridOptions(columnDefs);
-		var gridOptions_c5 = gagaAgGrid.getGridOptions(columnDefs);
-		
-		// 표시순번 수정가능
-		gridOptions_c1.defaultColDef.editable = true;
-		gridOptions_c2.defaultColDef.editable = true;
-		gridOptions_c3.defaultColDef.editable = true;
-		gridOptions_c4.defaultColDef.editable = true;
-		gridOptions_c5.defaultColDef.editable = true;
-		//중복선택
-		gridOptions_c1.rowSelection = 'multiple';
-		gridOptions_c2.rowSelection = 'multiple';
-		gridOptions_c3.rowSelection = 'multiple';
-		gridOptions_c4.rowSelection = 'multiple';
-		gridOptions_c5.rowSelection = 'multiple';
-		
-		gridOptions_c1.suppressRowClickSelection = true;
-		gridOptions_c2.suppressRowClickSelection = true;
-		gridOptions_c3.suppressRowClickSelection = true;
-		gridOptions_c4.suppressRowClickSelection = true;
-		gridOptions_c5.suppressRowClickSelection = true;
-		
-		///저장
-		$('#btnSaveMktMail').on('click', function() {
-			
-			//타이틀 길이 제한 2자 이상 50자미만
-			var check = $('#mailManagementForm input[name=mailtNm]').val();
-
-			if(check.length < 2){
-				mcxDialog.alert('타이틀은 2자 이상 50자 미만으로 입력하세요.');
-				return false;
-			}
-			
-			let arrayData = gagaAgGrid.getAllRowData(gridOptions_c1)
-			let arrayData2 = gagaAgGrid.getAllRowData(gridOptions_c2)
-			let arrayData3 = gagaAgGrid.getAllRowData(gridOptions_c3)
-			let arrayData4 = gagaAgGrid.getAllRowData(gridOptions_c4)
-			let arrayData5 = gagaAgGrid.getAllRowData(gridOptions_c5)
-			
-
-			//상품 등록 CHECK
-			if(arrayData.length == 0 && $('#btnAddGridNum').css('display') != 'none'){
-				mcxDialog.alert('구분자1의 상품을 등록해주세요.');
-				return false;
-			}
-			if(arrayData2.length == 0 && $('#btnAddGridNum2').css('display') != 'none'){
-				mcxDialog.alert('구분자2의 상품을 등록해주세요.');
-				return false;
-			}
-			if(arrayData3.length == 0 && $('#btnAddGridNum3').css('display') != 'none'){
-				mcxDialog.alert('구분자3의 상품을 등록해주세요.');
-				return false;
-			}
-			if(arrayData4.length == 0 && $('#btnAddGridNum4').css('display') != 'none'){
-				mcxDialog.alert('구분자4의 상품을 등록해주세요.');
-				return false;
-			}
-			if(arrayData5.length == 0 && $('#btnAddGridNum5').css('display') != 'none'){
-				mcxDialog.alert('구분자5의 상품을 등록해주세요.');
-				return false;
-			}
-			
-			let check1 = $('#mailManagementForm input[name=mailtcNm]').val();
-			let check2 = $('#mailManagementForm input[name=mailtcNm2]').val();
-			let check3 = $('#mailManagementForm input[name=mailtcNm3]').val();
-			let check4 = $('#mailManagementForm input[name=mailtcNm4]').val();
-			let check5 = $('#mailManagementForm input[name=mailtcNm5]').val();
-
-			let mailTc = {};
-			let mailTc2 = {};
-			let mailTc3 = {};
-			let mailTc4 = {};
-			let mailTc5 = {};
-			
-			if(check1 != null && check1 != '') {
-				mailTc.mailtcNm = $('#mailManagementForm input[name=mailtcNm]').val();
-				mailTc.mailtcLink = $('#mailManagementForm input[name=mailtcLink]').val();
-				mailTc.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr]:checked').val();
-				mailTc.mailtcSq = $('#mailManagementForm input[name=mailtcSq]').val();
-			} if(check2 != null && check2 != '') {
-				mailTc2.mailtcNm = $('#mailManagementForm input[name=mailtcNm2]').val();
-				mailTc2.mailtcLink = $('#mailManagementForm input[name=mailtcLink2]').val();
-				mailTc2.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr2]:checked').val();
-				mailTc2.mailtcSq = $('#mailManagementForm input[name=mailtcSq2]').val();
-
-			} if(check3 != null && check3 != '') {
-				mailTc3.mailtcNm = $('#mailManagementForm input[name=mailtcNm3]').val();
-				mailTc3.mailtcLink = $('#mailManagementForm input[name=mailtcLink3]').val();
-				mailTc3.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr3]:checked').val();
-				mailTc3.mailtcSq = $('#mailManagementForm input[name=mailtcSq3]').val();
-
-			} if(check4 != null && check4 != '') {
-				mailTc4.mailtcNm = $('#mailManagementForm input[name=mailtcNm4]').val();
-				mailTc4.mailtcLink = $('#mailManagementForm input[name=mailtcLink4]').val();
-				mailTc4.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr4]:checked').val();
-				mailTc4.mailtcSq = $('#mailManagementForm input[name=mailtcSq4]').val();
-
-				
-			} if(check5!= null && check5 != '') {
-				mailTc5.mailtcNm = $('#mailManagementForm input[name=mailtcNm5]').val();
-				mailTc5.mailtcLink = $('#mailManagementForm input[name=mailtcLink5]').val();
-				mailTc5.goodsCpr = $('#mailManagementForm input:radio[name=goodsCpr5]:checked').val();
-				mailTc5.mailtcSq = $('#mailManagementForm input[name=mailtcSq5]').val();
-
-			}
-		 	
-			
-			//헤더 선택체크 내용 체크
-			if(!gagajf.validation('#mailManagementForm'))
-				return false;
-			
-			if(gagajf.isNull($('#mailContent').val())){
-				mcxDialog.alert('내용을 입력해 주세요.');
-				return false;
-			}
-						
-			//구분자명 CHECK
-			if($('#btnAddGridNum').css('display') != 'none' && check1.length < 2){
-				mcxDialog.alert('구분자1명은 2자 이상 50자 미만으로 입력하세요.');
-				return false;
-			}
-			if($('#btnAddGridNum2').css('display') != 'none' && check2.length < 2){
-				mcxDialog.alert('구분자2명은 2자 이상 50자 미만으로 입력하세요.');
-				return false;
-			}
-			if($('#btnAddGridNum3').css('display') != 'none' && check3.length < 2){
-				mcxDialog.alert('구분자3명은 2자 이상 50자 미만으로 입력하세요.');
-				return false;
-			}
-			if($('#btnAddGridNum4').css('display') != 'none' && check4.length < 2){
-				mcxDialog.alert('구분자4명은 2자 이상 50자 미만으로 입력하세요.');
-				return false;
-			}
-			if($('#btnAddGridNum5').css('display') != 'none' && check5.length < 2){
-				mcxDialog.alert('구분자5명은 2자 이상 50자 미만으로 입력하세요.');
-				return false;
-			}
-			
-			
-			mcxDialog.confirm("내용을 등록 하시겠습니까?", {
-				cancelBtnText: "취소",
-				sureBtnText: "확인",
-				sureBtnClick: function() {
-					let data = {};
-					
-					data.mktmailManagementTc = mailTc;
-					data.mktmailManagementTc2 = mailTc2;
-					data.mktmailManagementTc3 = mailTc3;
-					data.mktmailManagementTc4 = mailTc4;
-					data.mktmailManagementTc5 = mailTc5;
-					
-					data.mktmailManagementGoods = arrayData;
-					data.mktmailManagementGoods2 = arrayData2;
-					data.mktmailManagementGoods3 = arrayData3;
-					data.mktmailManagementGoods4 = arrayData4;
-					data.mktmailManagementGoods5 = arrayData5;
-					
-					//업데이트 일 경우 처리
-					if($('#mailManagementForm input[name=mailtSq]').val() != null && $('#mailManagementForm input[name=mailtSq]').val() != ''){
-						data.mailtSq = mktmailInfo.mailtSq;
-					}
-					
-					data.mktHeader = $('#mailManagementForm select[name=mailHsq]').val();
-					data.mktFooter = $('#mailManagementForm select[name=mailFsq]').val();
-					data.mailtNm = $('#mailManagementForm input[name=mailtNm]').val();
-					data.mailtGb = $('#mailManagementForm input:radio[name=mailtGb]:checked').val();
-					data.mailContent = $('#mailManagementForm textarea[name=mailContent]').val();
-					
-					let jsonData = JSON.stringify(data);
-					
-					gagajf.ajaxJsonSubmit($('#mailManagementForm').prop('action'), jsonData, function(data){
-						uifnPopupClose('popupMktMail');
-						$('#btnSearch').trigger('click');
-					});
-				
-				}
-			});
-		
-		});
-		
-		// 상품 구분 추가 버튼 추가 버튼 표시는 1~5까지 순서대로 표시
-		$('#btnAddGrid').on('click', function(){
-			if($('#btnAddGridNum').css('display') == 'none'){
-				$('#btnAddGridNum').show();
-			}else if($('#btnAddGridNum2').css('display') == 'none' && $('#btnAddGridNum').css('display') != 'none'){
-				$('#btnAddGridNum2').show();
-			}else if($('#btnAddGridNum3').css('display') == 'none' && $('#btnAddGridNum2').css('display') != 'none'){
-				$('#btnAddGridNum3').show();
-			}else if($('#btnAddGridNum4').css('display') == 'none' && $('#btnAddGridNum3').css('display') != 'none'){
-				$('#btnAddGridNum4').show();
-			}else if($('#btnAddGridNum5').css('display') == 'none' && $('#btnAddGridNum4').css('display') != 'none'){
-				$('#btnAddGridNum5').show();
-			}else if($('#btnAddGridNum5').css('display') != 'none'){
-				mcxDialog.alertC("구분자는 최대 5개까지 등록가능합니다.", {
-					sureBtnText: "확인"
-				});
-				return false;
-			}
-		});
-		
-		// 버튼별 상품추가 팝업
-		var fnOpenGoodsPopup = function(param) {
-			switch (param){
-			case 'gridOptions_c1': 
-				AddgridRow = gridOptions_c1;
-				break;
-			case 'gridOptions_c2' : 
-				AddgridRow = gridOptions_c2;
-				break;
-			case 'gridOptions_c3' : 
-				AddgridRow = gridOptions_c3;
-				break;
-			case 'gridOptions_c4' : 
-				AddgridRow = gridOptions_c4;
-				break;
-			case 'gridOptions_c5' : 
-				AddgridRow = gridOptions_c5;
-				break;
-			}
-			cfnOpenGoodsPopup('fnFetchGoods');
-		}
-
-		// 상품추가
-		var fnFetchGoods = function(goodsData) {
-			
-			if (goodsData.length < 1) return;
-			// 기존상품
-			var oldGoodsSetList = gagaAgGrid.getAllRowData(AddgridRow);
-			var index = oldGoodsSetList.length+1;
-			
-			var arrGoodsCd = [];
-			$.each(goodsData, function(idx, item) {
-				arrGoodsCd.push(item.goodsCd);
-			})
-			
-			var isExist = false;
-			var jsonData = JSON.stringify(arrGoodsCd);
-			gagajf.ajaxJsonSubmit('/marketing/mktMailManagement/goods/info', jsonData, function(result) {
-				$.each(result, function(idx, item) {
-					isExist = false;
-					AddgridRow.api.forEachNode(function(rowNode, index) {
-						//중복상품 여부 확인
-						if (item.goodsCd == rowNode.data.goodsCd){
-							isExist = true;
-						}
-					});
-					
-					//상품 추가 갯수 제한
-					if(goodsData.length > 40){
-						mcxDialog.alert('상품은 최대 40개까지 추가 가능합니다.');
-						return false;
-					}
-					
-					if(!isExist){
-						var data = {
-							   goodsCd : item.goodsCd
-						   ,  brandEnm : item.brandEnm
-						   ,   goodsNm : item.goodsNm
-						   , goodsStat : item.goodsStat
-						   , listPrice : item.listPrice
-						   , currPrice : item.currPrice
-						   ,   dispOrd : index
-	
-						};
-						//그리드 마지막에 추가해야함
-						AddgridRow.api.updateRowData({add: [data], addIndex: idx});
-						AddgridRow.api.refreshCells();
-						index++;
-					}
-				});
-			});
-		}
-	
-		// 상품 삭제
-		var fnGoodsDeleteRow = function(param) {
-			switch (param){
-			case 'gridOptions_c1': 
-				AddgridRow = gridOptions_c1;
-				break;
-			case 'gridOptions_c2' : 
-				AddgridRow = gridOptions_c2;
-				break;
-			case 'gridOptions_c3' : 
-				AddgridRow = gridOptions_c3;
-				break;
-			case 'gridOptions_c4' : 
-				AddgridRow = gridOptions_c4;
-				break;
-			case 'gridOptions_c5' : 
-				AddgridRow = gridOptions_c5;
-				break;
-			}
-			
-			var selectedData = gagaAgGrid.selectedRowData(AddgridRow);
-			var removedData = gagaAgGrid.removeRowData(AddgridRow);
-			
-			if (selectedData.length == 0) {
-				mcxDialog.alert('선택된 행이 없습니다.');
-				return false;
-			}
-			
-			//상세보기에서 삭제처리
-			if(mode == 'U') {
-				mcxDialog.confirm('해당 상품을 삭제하시겠습니까?', {
-					cancelBtnText: "취소",
-					sureBtnText: "확인",
-					sureBtnClick: function(){
-						
-						//화면에서 삭제
-						gagaAgGrid.removeRowData(AddgridRow, false);
-						var deleteData = [];
-						$.each(removedData, function(idx, item) {
-							deleteData.push(item);
-						})
-						
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
-					}
-				});
-			}
-		}
-
-		// 상품 구분 폼 삭제
-		function btnDeleteGridNum(param){
-			if($('#btnAddGridNum').css('display') !='none'){
-				//구분자 DB 삭제
-				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm]').val() != null && $('#mailManagementForm input[name=mailtcNm]').val() != ''){
-					var deleteData = [];
-					var corner = {};
-						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq]').val();
-						corner.useYn = 'N';
-						deleteData.push(corner);
-					var jsonData = JSON.stringify(deleteData);
-					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
-				}
-				//상품전시 삭제
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c1);
-				if(mode == "U" && selectedData.length != 0){
-						//상세보기에서 삭제처리
-						var deleteData = [];
-						$.each(selectedData, function(idx, item) {
-							deleteData.push(item);
-						})
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
-				}
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c1);
-				selectedData.forEach(function(item, index) {
-					gridOptions_c1.api.updateRowData({remove: [item]});
-				});
-				$('#mailManagementForm input[name=mailtcNm]').val('');
-				$('#mailManagementForm input[name=mailtcLink]').val('');
-				$('#mailManagementForm input:radio[name="goodsCpr"]:radio[value="3"]').prop('checked', true);
-				$('#btnAddGridNum').hide();
-			}
-		}
-
-		function btnDeleteGridNum2(param){
-			if($('#btnAddGridNum2').css('display') !='none'){
-				//구분자 DB 삭제
-				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm2]').val() != null && $('#mailManagementForm input[name=mailtcNm2]').val() != ''){
-					var deleteData = [];
-					var corner = {};
-						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq2]').val();
-						corner.useYn = 'N';
-						deleteData.push(corner);
-					var jsonData = JSON.stringify(deleteData);
-					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
-				}
-				//상품전시 삭제
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c2);
-				if(mode == "U" && selectedData.length != 0){
-						//상세보기에서 삭제처리
-						var deleteData = [];
-						$.each(selectedData, function(idx, item) {
-							deleteData.push(item);
-						})
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
-				}
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c2);
-				selectedData.forEach(function(item, index) {
-					gridOptions_c1.api.updateRowData({remove: [item]});
-				});
-				$('#mailManagementForm input[name=mailtcNm2]').val('');
-				$('#mailManagementForm input[name=mailtcLink2]').val('');
-				$('#mailManagementForm input:radio[name="goodsCpr2"]:radio[value="3"]').prop('checked', true);
-				$('#btnAddGridNum2').hide();
-			}
-		}
-		
-		function btnDeleteGridNum3(param){
-			if($('#btnAddGridNum3').css('display') !='none'){
-				//구분자 DB 삭제
-				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm3]').val() != null && $('#mailManagementForm input[name=mailtcNm3]').val() != ''){
-					var deleteData = [];
-					var corner = {};
-						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq3]').val();
-						corner.useYn = 'N';
-						deleteData.push(corner);
-					var jsonData = JSON.stringify(deleteData);
-					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
-				}
-				//상품전시 삭제
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c3);
-				if(mode == "U" && selectedData.length != 0){
-						//상세보기에서 삭제처리
-						var deleteData = [];
-						$.each(selectedData, function(idx, item) {
-							deleteData.push(item);
-						})
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
-				}
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c3);
-				selectedData.forEach(function(item, index) {
-					gridOptions_c1.api.updateRowData({remove: [item]});
-				});
-				$('#mailManagementForm input[name=mailtcNm3]').val('');
-				$('#mailManagementForm input[name=mailtcLink3]').val('');
-				$('#mailManagementForm input:radio[name="goodsCpr3"]:radio[value="3"]').prop('checked', true);
-				$('#btnAddGridNum3').hide();
-			}
-		}		
-		
-		function btnDeleteGridNum4(param){
-			if ($('#btnAddGridNum4').css('display') !='none'){
-				
-				//구분자 DB 삭제
-				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm4]').val() != null && $('#mailManagementForm input[name=mailtcNm4]').val() != ''){
-					var deleteData = [];
-					var corner = {};
-						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq4]').val();
-						corner.useYn = 'N';
-						deleteData.push(corner);
-					var jsonData = JSON.stringify(deleteData);
-					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
-				}
-				//상품전시 삭제
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c4);
-				if(mode == "U" && selectedData.length != 0){
-						//상세보기에서 삭제처리
-						var deleteData = [];
-						$.each(selectedData, function(idx, item) {
-							deleteData.push(item);
-						})
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
-				}
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c4);
-				selectedData.forEach(function(item, index) {
-					gridOptions_c1.api.updateRowData({remove: [item]});
-				});
-				$('#mailManagementForm input[name=mailtcNm4]').val('');
-				$('#mailManagementForm input[name=mailtcLink4]').val('');
-				$('#mailManagementForm input:radio[name="goodsCpr4"]:radio[value="3"]').prop('checked', true);
-				$('#btnAddGridNum4').hide();
-			}
-		}
-		function btnDeleteGridNum5(param){
-			if ($('#btnAddGridNum5').css('display') !='none'){
-				
-				//구분자 DB 삭제
-				if(mode == "U" && $('#mailManagementForm input[name=mailtcNm5]').val() != null && $('#mailManagementForm input[name=mailtcNm5]').val() != ''){
-					var deleteData = [];
-					var corner = {};
-						corner.mailtcSq = $('#mailManagementForm input[name=mailtcSq5]').val();
-						corner.useYn = 'N';
-						deleteData.push(corner);
-					var jsonData = JSON.stringify(deleteData);
-					gagajf.ajaxJsonSubmit('marketing/mktmailManagement/corner/delete', jsonData);
-				}
-				//상품전시 삭제
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c5);
-				if(mode == "U" && selectedData.length != 0){
-						//상세보기에서 삭제처리
-						var deleteData = [];
-						$.each(selectedData, function(idx, item) {
-							deleteData.push(item);
-						})
-						var jsonData = JSON.stringify(deleteData);
-						gagajf.ajaxJsonSubmit('marketing/mktmailManagement/goods/delete', jsonData);
-				}
-				var selectedData = gagaAgGrid.getAllRowData(gridOptions_c5);
-				selectedData.forEach(function(item, index) {
-					gridOptions_c1.api.updateRowData({remove: [item]});
-				});	
-				$('#mailManagementForm input[name=mailtcNm5]').val('');
-				$('#mailManagementForm input[name=mailtcLink5]').val('');
-				$('#mailManagementForm input:radio[name="goodsCpr5"]:radio[value="3"]').prop('checked', true);
-				$('#btnAddGridNum5').hide();
-			}
-		} 
-
-	$(document).ready(function() {
-		gagaAgGrid.createGrid("gridSectionGbList1", gridOptions_c1);
-		gagaAgGrid.createGrid("gridSectionGbList2", gridOptions_c2);
-		gagaAgGrid.createGrid("gridSectionGbList3", gridOptions_c3);
-		gagaAgGrid.createGrid("gridSectionGbList4", gridOptions_c4);
-		gagaAgGrid.createGrid("gridSectionGbList5", gridOptions_c5);
-		
-		if (mode == 'U') {
-			
-			$('#mailManagementForm input[name=mailtSq]').val(mktmailInfo.mailtSq);
-			$('#mailManagementForm select[name=mailHsq]').val(mktmailInfo.mailHsq);
-			$('#mailManagementForm select[name=mailFsq]').val(mktmailInfo.mailFsq);
-			$('#mailManagementForm input[name=mailtNm]').val(mktmailInfo.mailtNm);
-			$('#mailManagementForm textarea[name=mailContent]').val(mktmailInfo.mailContent);
-			
-			if(mktmailInfo.mailtGb == "A"){
-				$('#mailManagementForm input:radio[name="mailtGb"]:radio[value="A"]').prop('checked', true);
-			}
-			
-			$.each(mktmailTCInfo, function(idx, item) {
-				
-				if (idx == 0) {
-					$('#mailManagementForm input[name=mailtcNm]').val(item.tc.mailtcNm);						
-					$('#mailManagementForm input[name=mailtcSq]').val(item.tc.mailtcSq);
-					$('#mailManagementForm input[name=mailtcLink]').val(item.tc.mailtcLink);
-					if(mktmailTCInfo[idx].tc.goodsCpr == 1){
-						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="1"]').prop('checked', true);
-					}else if(mktmailTCInfo[idx].tc.goodsCpr == 2){
-						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="2"]').prop('checked', true);
-					}else if(mktmailTCInfo[idx].tc.goodsCpr == 3){
-						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="3"]').prop('checked', true);
-					}else if(mktmailTCInfo[idx].tc.goodsCpr == 4){
-						$('#mailManagementForm input:radio[name=goodsCpr]:input[value="4"]').prop('checked', true);
-					}
-					$('#btnAddGridNum').show();
-				} else {
-					$('#mailManagementForm input[name=mailtcNm' + (idx + 1) + ']').val(item.tc.mailtcNm);
-					$('#mailManagementForm input[name=mailtcLink' + (idx + 1) + ']').val(item.tc.mailtcLink);
-					$('#mailManagementForm input[name=mailtcSq' + (idx + 1) + ']').val(item.tc.mailtcSq);
-						if(mktmailTCInfo[idx].tc.goodsCpr == 1){
-							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="1"]').prop('checked', true);
-						}else if(mktmailTCInfo[idx].tc.goodsCpr == 2){
-							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="2"]').prop('checked', true);
-						}else if(mktmailTCInfo[idx].tc.goodsCpr == 3){
-							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="3"]').prop('checked', true);
-						}else if(mktmailTCInfo[idx].tc.goodsCpr == 4){
-							$('#mailManagementForm input:radio[name=goodsCpr' + (idx + 1) + ']:input[value="4"]').prop('checked', true);
-						}
-					$('#btnAddGridNum' + (idx + 1)).show();
-				}
-				
-				switch(idx) {
-				case 0:
-					gridOptions_c1.api.setRowData(item.goodsList);
-					break;
-				case 1:
-					gridOptions_c2.api.setRowData(item.goodsList);
-					break;
-				case 2:
-					gridOptions_c3.api.setRowData(item.goodsList);
-					break;
-				case 3:
-					gridOptions_c4.api.setRowData(item.goodsList);
-					break;
-				case 4:
-					gridOptions_c5.api.setRowData(item.goodsList);
-					break;
-				}
-			});
-			
-		}//end of mode
-
-		// Create a summernote
-		let snOptions = gagaSn.getToolbarOptions();
-				
-		gagaSn.createSummernote(snOptions, '#mailContent');
-
-	});
-/*]]>*/
-</script>
-
-</html>

+ 0 - 219
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementForm.html

@@ -1,219 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : MktmailmanagementForm.html
- * @desc    : MKT 메일관리
- *============================================================================
- * SISUN
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021.02.05   csh9191     최초 작성
- *******************************************************************************
- -->
-	<div id="main">
-		<!-- 메인타이틀 영역 -->
-		<div class="main-title"></div>
-		<!-- //메인타이틀 영역 -->
-		
-		<!-- 메뉴 설명 -->
-		<div class="infoBox menu-desc"></div>
-
-		<form id="searchForm" name="searchForm" action="#" th:action="@{'/marketing/mktmailManagement/list'}"  onsubmit="$('#btnSearch').trigger('click'); return false;">
-			<input type="hidden" name="mailtcSq" th:value="${mailtcSq}">
-			<!-- 검색조건 영역 -->
-			<div class="panelStyle" >
-				<!-- //TITLE -->
-				<div class="panelContent">
-					<table class="frmStyle">
-						<colgroup>
-							<col style="width: 7%;"/>
-							<col/>
-						</colgroup>
-						<tr>
-							<th>기간</th>
-							<td id="sellTerms"></td>
-						</tr>
-
-						<tr>
-							<th>조회</th>
-							<td>
-								<label class="rdoBtn"><input type="radio" name="searchGb" value="mailtSq"checked/>메일번호</label>
-								<label class="rdoBtn"><input type="radio" name="searchGb" value="mailtNm"/>타이틀</label>
-								<input type="text" class="w900" name="searchTxt" id="searchTxt"/>
-							</td>
-						</tr>
-					</table>
-					<ul class="panelBar">
-						<li class="center">
-							<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset();" >초기화</button>
-							<button type="button" class="btn btn-info btn-lg" id="btnSearch" >조회</button>
-						</li>
-					</ul>
-				</div>
-			</div>
-			<!-- 검색조건 영역 -->
-
-			<!-- 리스트 영역 -->
-			<div class="panelStyle">
-				<!-- 버튼 배치 영역 -->
-				<ul class="panelBar">
-					<li class="left">
-						<button type="button" class="btn btn-danger btn-lg" id="btnDeleteRow">선택삭제</button>	
-					</li>
-					<li class="right">
-						<button type="button" class="btn btn-info btn-lg" onclick="fnOpenMailHFPopup('N');">메일템플릿 등록</button>
-				</ul>
-				<!-- //버튼 배치 영역 -->
-				<div id="gridList" style="width: 100%; height: 570px" class="ag-theme-balham"></div>
-			</div>
-		<!-- //리스트 영역 -->
-		</form>
-	</div>
-<script th:inline="javascript">
-/*<![CDATA[*/
-	
-	//메일구분
-	let mailtGb = {"M" :"마케팅메일", "A":"자동메일"};
-	
-	var columnDefs = [];
-	columnDefs = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		{headerName: "메일번호", field: "mailtSq", width: 100, cellClass: 'text-center'},
-		{headerName: "메일구분", field: "mailtGb", width: 200, cellClass: 'text-center',
-		 	valueFormatter: function (params) { return gagaAgGrid.lookupValue(mailtGb, params.value); }},
-		{	headerName: "타이틀", field: "mailtNm", width: 350, cellClass: 'text-center',
-			cellRenderer: function(params) 
-			{ 
-				return '<a href="javascript:void(0);">' + params.value + '</a>'; 
-			}
-		},
-		{	//미리보기 
-			headerName: "", field:"preview" , width: 150, cellClass: 'text-center',
-			cellRenderer: function(params) {
-				return '<button="javascript:void(0);" class="btn btn-info btn-sm">'+ '미리보기' +'</button>'
-			}
-		
-		},
-		{headerName: "등록자", field: "regNm", width: 150, cellClass: 'text-center'},
-		{
-			headerName: "등록일시", field: "regDt", width: 200, cellClass: 'text-center',
-			cellRenderer: function(params) 
-			{ 
-				return gagaAgGrid.toDateTimeFormat(params.value); 
-			}
-		},
-		{
-			headerName: "수정자", field: "updNm", width: 150, cellClass: 'text-center'},
-		{
-			headerName: "수정일시", field: "updDt", width: 200, cellClass: 'text-center', 
-			cellRenderer: function(params) 
-			{ 
-				return gagaAgGrid.toDateTimeFormat(params.value); 
-			}
-		}
-	];
-	
-	// Get GridOptions
-	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
-	
-	// 다중 선택 추가
-	gridOptions.rowSelection = 'multiple';	
-	
-	//셀 클릭 이벤트 -> 팝업창
-	gridOptions.onCellClicked = function(event) {
-		if (event.colDef.field == 'mailtNm'){
-			fnOpenMailHFPopup('U', event.data.mailtSq);
-		}else if(event.colDef.field == 'preview'){
-			fnOpenMailPreviewPopup(event.data.mailtSq);
-		}
-			
-	}
-	
-	// grid row Delete
-	$('#btnDeleteRow').on('click', function() {
-		var removedData = gagaAgGrid.removeRowData(gridOptions);
-		
-		if (removedData.length == 0) {
-			mcxDialog.alert('선택된 행이 없습니다.');
-			return;
-		}
-		
-		mcxDialog.confirm("삭제하시겠습니까?", {
-			sureBtnText: "확인",
-			cancelBtnText: "취소",
-			sureBtnClick: function() {
-				// delete 대신 update 처리해야 하므로 다음과 같이 useYn 값으로 처리
-				var updatedData = [];
-				
-				$.each(removedData, function(idx, item) {
-					item.useYn = 'N';
-					updatedData.push(item);
-				});
-				
-				var jsonData = JSON.stringify(updatedData);
-				gagajf.ajaxJsonSubmit('/marketing/mktmailManagement/delete', jsonData, function() {
-					$('#btnSearch').trigger('click');
-				});
-			}
-		});
-	});
-	
-	// 조회버튼 - 검색
-	$('#btnSearch').on('click', function() {
-// 		if(!dateCheck()) return;
-		var formId = "#searchForm";
-		gagaAgGrid.fetch($(formId).prop('action'), gridOptions, formId);
-	});
-	
-// 조회검색 조건 CHECK
-// 	var dateCheck = function(){
-// 	var fromDate = $('#mktmailStdt').val();
-// 	var toDate = $('#mktmailEddt').val();
-
-// 		if (gagajf.isNull(fromDate)) {
-// 			mcxDialog.alert('시작 기간을 입력하세요.');
-// 			return;
-// 		}
-// 		if (gagajf.isNull(toDate)) {
-// 			mcxDialog.alert('종료 기간을 입력하세요.');
-// 			return;
-// 		}
-// 		return true;
-// 	}
-	
-	// 등록/상세 팝업
-	var fnOpenMailHFPopup = function(mode, mailtSq) {
-		let data = gridOptions.api.getSelectedRows();
-		var actionUrl = '/marketing/mktmailmanagement/detail/form' + '?mode=' + mode;
-		if (!gagajf.isNull(mailtSq)) actionUrl += '&mailtSq=' + mailtSq;
-		cfnOpenModalPopup(actionUrl, 'popupMktMail');
-	}
-	
-	//미리보기
-	var fnOpenMailPreviewPopup = function(mailtSq) {
-		let data = gridOptions.api.getSelectedRows();
-		var actionUrl = '/marketing/mktmailmanagement/preview';
-		if (!gagajf.isNull(mailtSq)) actionUrl += '?mailtSq=' + mailtSq;
-// 		cfnOpenModalPopup(actionUrl, 'popupMktMailPreview');
-		window.open(actionUrl, '_blank', 'popupMktMailPreview');
-	}
-	
-	
-	$(document).ready(function() {
-	
-		cfnCreateCalendar('#sellTerms', 'mktmailStdt', 'mktmailEddt', true);
-	
-		// Create a agGrid
-		gagaAgGrid.createGrid('gridList', gridOptions);
-		gagaAgGrid.hideStatusBar('gridList');
-	
-	});
-
-/*]]>*/
-
-</script>
-</html>

+ 0 - 54
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementPreviewForm.html

@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-<html lang="ko"
-	xmlns:th="http://www.thymeleaf.org">
-<!--
- *******************************************************************************
- * @source  : MktmailmanagementPreviewForm.html
- * @desc    : MktmailmanagementPreviewForm MKT메일 미리보기 화면
- *============================================================================
- * STYLE24
- * Copyright(C) 2020 TSIT, All rights reserved.
- *============================================================================
- * VER  DATE         AUTHOR      DESCRIPTION
- * ===  ===========  ==========  =============================================
- * 1.0  2021. 02. 19   csh9191     최초 작성
- *******************************************************************************
- -->
-<div class="modalPopup" data-width="1200" id="popupMktMailPreview">
-	<div class="panelStyle">
-  		<!-- Header  -->
- 		<header th:if="${mktmailPreviewHeader}">
-			<th:block th:utext="${mktmailPreviewHeader.mailhfContent}"></th:block>
-		</header>
-		
-		<!-- content -->
-		<div th:if="${mktmailPreviewContent}">
- 			<th:block th:utext="${mktmailPreviewContent.mailContent}"></th:block> 
-		</div>
-
-		<!-- 링크/상품이미지 -->
-		<div th:if="${mktmailPreviewGoods}">
-			<th:block th:each="oneData, status : ${mktmailPreviewGoods}">
-				
-				<!-- 메일 코너 링크표시  -->
-				<div th:if="${oneData.tc.mailtcLink != null && oneData.tc.mailtcLink != ''}">
-					<a th:href="@{${oneData.tc.mailtcLink}}" target="_blank">상품 상세보기</a>
-				</div><br>
-					
-				<!-- 상품이미지 -->
-				<th:block th:each="goodsData, status : ${oneData.goodsList}">
-					<img th:src="@{/image/imgoodsData.sysImgNm}"/>
-					<!-- goodsCpr -->
-					<th:block th:if="${status.count  % oneData.tc.goodsCpr == 0}">
-						<br>
-					</th:block>
-				</th:block><br><!-- 구분자별 br -->
-		</div><br>
-			
-		<!-- Footer -->
-		 <footer th:if="${mktmailPreviewFooter}">
-			<th:block th:utext="${mktmailPreviewFooter.mailhfContent}"></th:block>
-		</footer>
-	</div>
-</div>
-</html>

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

@@ -2130,11 +2130,11 @@
 	
 	
 $(document).ready(function() {
-		//gagaSn.setContents('#fsrcPcBtm', ''); 
-		//gagaSn.setContents('#fsrcMobileBtm', '');
-		//gagaSn.setContents('#fsrcPcTop', ''); 
-		//gagaSn.setContents('#fsrcMobileTop', '');
-		//gagaSn.setContents('#note', '');
+		gagaSn.setContents('#fsrcPcBtm', ''); 
+		gagaSn.setContents('#fsrcMobileBtm', '');
+		gagaSn.setContents('#fsrcPcTop', ''); 
+		gagaSn.setContents('#fsrcMobileTop', '');
+		gagaSn.setContents('#note', '');
  		var snOptions1 = gagaSn.getToolbarOptions('media');
 		var snOptions2 = gagaSn.getToolbarOptions('media');
 		var snOptions3 = gagaSn.getToolbarOptions('media');

+ 8 - 12
src/main/webapp/WEB-INF/views/pos/PosMainForm.html

@@ -1,36 +1,32 @@
 <!DOCTYPE html>
 <html lang="ko"
-	  xmlns:th="http://www.thymeleaf.org">
-<head th:replace="common/fragments/header :: header"></head>
-<body>
-<th:block th:replace="common/fragments/variables :: variables"></th:block>
-
+	xmlns:th="http://www.thymeleaf.org">
 <!--
  *******************************************************************************
  * @source  : PosMainForm.html
  * @desc    : POS Main Page
  *============================================================================
- * ISTYLE24
+ * STYLE24
  * Copyright(C) 2020 TSIT, All rights reserved.
  *============================================================================
  * VER  DATE         AUTHOR      DESCRIPTION
  * ===  ===========  ==========  =============================================
- * 1.0  2020.11.13   moon        최초 작성
+ * 1.0  2021.05.07   moon        최초 작성
  *******************************************************************************
  -->
 
-<div id="main" style="padding-top:0;">
-		<!-- TITLE -->
+<div id="main">
+		<!-- 메인타이틀 영역 -->
 		<div class="main-title">
 			<h1>매장명 : <span th:text="${delvLocNm}"></span></h1>
 		</div>
-		<!-- //TITLE -->
+		<!-- //메인타이틀 영역 -->
 	
 		<!-- TABS SPACE -->
 		<div class="tabs">
 			<!-- TABS NAVI -->
 			<ul class="tabsNav p-left">
-				<li class="on"><a href="#tab1#top" id="tab1-1">출고대기목록</a></li>
+				<li class="on"><a href="#tab1#top" id="tab1">출고대기목록</a></li>
 				<li><a href="#tab2#top">출고목록</a></li>
 				<li><a href="#tab3#top">정산내역</a></li>
 				<li><a href="#tab4#top">출고거부이력</a></li>
@@ -511,7 +507,7 @@
 	});
 
 	var fnSetDelvCallback = function() {
-		$('#tab1-1').trigger('click');
+		$('#tab1').trigger('click');
 		$('#btnWaitSearch').trigger('click');
 	};
 

+ 349 - 0
src/main/webapp/WEB-INF/views/withdraw/WithdrawDirectiveListForm.html

@@ -0,0 +1,349 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : WithdrawDirectiveListForm.html
+ * @desc    : 회수지시 목록 Page
+ *=============================================================
+ * ISTYLE24
+ * Copyright(C) 2021 TSIT, All rights reserved.
+ *=============================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  ==================================
+ * 1.0  2021.05.10   moon        최초 작성
+ *******************************************************************************
+ -->
+ 	<div id="main">
+		<!-- 메인타이틀 영역 -->
+		<div class="main-title">
+		</div>
+		<!-- //메인타이틀 영역 -->
+		<!-- 메뉴 설명 -->
+		<div class="infoBox menu-desc">
+		</div>
+		<!-- //메뉴 설명 -->
+		
+		<!-- 검색조건 영역 -->
+		<form id="searchForm" name="searchForm" action="#" th:action="@{'/withdraw/direct/list'}" onsubmit="$('#btnSearch').trigger('click'); return false;">
+		<div class="panelStyle">
+			<!-- TITLE -->
+			<div class="panelTitle">
+				<h3><i class="fa fa-info-circle"></i>아래 검색조건  <font color="red">주문번호,주문변경번호,회수요청일</font>중 하나를 꼭 입력해 주세요.</h3>
+				<span class="panelControl">
+					<i class="fa fa-chevron-up"></i>
+				</span>
+			</div>
+			<!-- //TITLE -->
+			<div class="panelContent">	
+				
+					<table class="frmStyle">
+						<colgroup>
+							<col style="width:8%;"/>
+							<col style="width:12%;"/>
+							<col style="width:8%;"/>
+							<col style="width:12%;"/>
+							<col style="width:8%;"/>
+							<col style="width:12%;"/>
+						</colgroup>
+						<tr>
+							<th>주문자명</th>
+							<td>
+								<input type="text" class="" name="ordNm" placeholder="" maxlength="20"/>
+							</td>
+							<th>주문번호</th>
+							<td>
+								<input type="text" class="" name="ordNo" data-valid-type="integer" placeholder="" maxlength="20"/>
+							</td>
+							<th>주문변경번호</th>
+							<td>
+								<input type="text" class="" name="ordChgSq" data-valid-type="integer" placeholder="" maxlength="20"/>
+							</td>
+						</tr>
+						<tr>	
+							<th>회수구분</th>
+							<td>
+								<select name="chgGb">
+									<option value="">&nbsp;전체&nbsp;</option>
+									<option value="G680_30"> 반품 </option>
+									<option value="G680_40"> 교환 </option>
+								</select>
+							</td>
+							<th>진행상태</th>
+							<td>
+								<select name="chgStat">
+									<option value="">전체</option>
+									<option value="G685_20">교환접수</option>
+									<option value="G685_50">반품접수</option>
+									<option value="G685_30">회수요청</option>
+									<option value="G685_40">교환완료</option>
+									<option value="G685_60">반품완료</option>
+									<option value="G685_49">교환철회</option>
+									<option value="G685_69">반품철회</option>
+									
+								</select>
+							</td>
+							<th>반품방식</th>
+							<td>
+								<select name="wdGb">
+									<option value="">&nbsp;전체&nbsp;</option>
+									<option value="W">방문회수</option>
+									<option value="D">직접배송</option>
+									
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>택배사전송여부</th>
+							<td>
+								<select name="sendYn">
+									<option value="">전체</option>
+									<option value="Y">전송</option>
+									<option value="N">미전송</option>
+									
+								</select>
+							</td>
+							<th>회수상태</th>
+							<td colspan="3">
+								<select name="wdShipState">
+									<option value="">전체</option>
+									<option th:if="${wdShipStateList}" th:each="oneData, status : ${wdShipStateList}" th:value="${oneData.cd}" th:text="${oneData.cdNm}"></option>
+								</select>
+							</td>
+						</tr>
+						<tr>
+							<th>회수요청일</th>
+							<td colspan="5" id="terms">
+							</td>
+						</tr>
+					</table>
+	
+					<ul class="panelBar">
+						<li class="center">
+						<button type="button" class="btn btn-base btn-lg" id="btnSearch">조회</button>
+						<button type="button" class="btn btn-gray btn-lg" onclick="$('#searchForm')[0].reset(); fnInitCalendar();">초기화</button>
+						<button type="button" id="btnExcel" class="btn btn-info btn-lg" >엑셀다운로드</button>
+						</li>
+					</ul>
+
+				</div>
+		</div>
+		<!-- //검색조건 영역 -->
+
+		<!-- 리스트 영역 -->
+		<div class="panelStyle">
+			<ul class="panelBar">
+				<li class="right">
+					검색결과 : <strong><span id="gridRowTotalCount">0</span> 건</strong>&nbsp;
+					쪽번호 <span id="pgNo">0</span>/ <strong id="endPgNo">0</strong>&nbsp;&nbsp;
+					<select id="pageSize" name="pageSize">
+						<option value="10" selected="selected">10개씩 보기</option>
+						<option value="20">20개씩 보기</option>
+						<option value="50">50개씩 보기</option>
+						<option value="100">100개씩 보기</option>
+						<option value="500">500개씩 보기</option>
+						<option value="1000">1000개씩 보기</option>
+					</select>
+					<input type="hidden" name="pageNo" id="pageNo" value ="1"/>
+				</li>
+			</ul>
+			<div id="gridList" style="width:100%; height: 500px;" class="ag-theme-balham"></div>
+			<ul class="panelBar">
+				<li class="center">
+					<div class="tablePaging" id="delvWithdrawListPagination"></div>
+				</li>
+			</ul>
+					 
+		</div>
+		</form>
+		<!-- //리스트 영역 -->
+	</div>
+<script type="text/javascript" src="/ux/plugins/gaga/gaga.paging.js?v=20210114"></script>
+<script th:inline="javascript">
+/*<![CDATA[*/
+	// 사이트목록
+
+	var columnDefs = [
+		{headerName: "주문변경번호", 	field: "ordChgSq", 		width: 100, cellClass: "text-center"},
+		{headerName: "주문번호", 		field: "ordNo", 		width: 100, cellClass: "text-center",
+			cellRenderer: function(params) { return gagajf.isNull(params.value) ? '' : '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "주문상세번호", 	field: "ordDtlNo", 		width: 100, cellClass: "text-center"},		
+		{headerName: "회수구분", 		field: "chgGb", 		width: 80, cellClass: "text-center",
+			cellRenderer: function (params) { return params.value == 'G680_30' ? '반품' : '교환'; }
+		},
+		
+		{headerName: "사유", 			field: "chgReasonNm", 	width: 150, cellClass: "text-left"},
+		{headerName: "진행상태", 		field: "chgStatNm", 	width: 100, cellClass: "text-center"},
+		{headerName: "상품코드", 		field: "goodsCd", 		width: 120, cellClass: "text-center",
+			cellRenderer: function(params) { return gagajf.isNull(params.value) ? '' : '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "상품명", 		field: "goodsNm", 		width: 200, cellClass: "text-left"},
+		{headerName: "수량", 			field: "chgQty", 		width: 80, cellClass: "text-center"},
+		{headerName: "반품방식", 		field: "wdGb", 			width: 80, cellClass: "text-center",
+			cellRenderer: function (params) { return params.value == 'W' ? '방문회수' : '직접배송'; }
+		},
+		{headerName: "택배사전송", 	field: "sendYn", 		width: 80, cellClass: "text-center"},
+		{headerName: "회수송장번호", 	field: "wdInvoiceNo", 	width: 100, cellClass: "text-center"},
+		{headerName: "회수상태", 		field: "wdShipStateNm", width: 120, cellClass: "text-center"},
+		{headerName: "회수상태수신일시", field: "wdStateDt", 	width: 120, cellClass: "text-center"},
+		{headerName: "미회수사유", 	field: "wdReasonCdNm", 	width: 100, cellClass: "text-center"},
+		{headerName: "재회수지시", 	field: "wdShipState", 		width: 100,	cellClass: 'text-center',
+			cellRenderer: function(params) {
+				return params.value == '12' && params.data.chgStat == 'G685_30' ? '<button type="button" class="btn btn-base btn-sm" onclick="fnReRecallOrder(\'' + params.data.chgGb + '\',\'' + params.data.ordDtlNo + '\',\''+params.data.ordChgSq+'\');">&nbsp;재회수지시&nbsp;</button>' : "";
+			}
+		},	
+		{headerName: "교환선발송여부 ", 	field: "wdBfSendYn", 	width: 110, cellClass: "text-center"},
+		{headerName: "배송시작일시", 	field: "wdStdt", 		width: 120, cellClass: "text-center"},
+		{headerName: "배송종료일시", 	field: "wdEddt", 		width: 120, cellClass: "text-center"},
+		{headerName: "수취인명", 		field: "recipNm", 		width: 120, cellClass: "text-center"},
+		{headerName: "변경자명", 		field: "chgerNm", 		width: 100, cellClass: "text-center"},
+		{headerName: "변경자휴대전화", 	field: "chgerPhnno", 	width: 120, cellClass: "text-center"},
+		{headerName: "변경자전화번호", 	field: "chgerTelno", 	width: 120, cellClass: "text-center"},
+		{headerName: "변경자우편번호", 	field: "chgerZipcode", 	width: 120, cellClass: "text-center"},
+		{headerName: "변경자기본주소", 	field: "chgerBaseAddr", width: 300, cellClass: "text-left"},
+		{headerName: "변경자상세주소", 	field: "chgerDtlAddr", 	width: 200, cellClass: "text-left"},
+		{headerName: "주문자명", 		field: "ordNm", 		width: 100, cellClass: "text-center"},
+		{headerName: "주문자휴대전화", 	field: "ordPhnno", 		width: 120, cellClass: "text-center"},
+		{headerName: "주문자전화번호", 	field: "ordTelno", 		width: 120, cellClass: "text-center"},
+		{headerName: "주문자이메일", 	field: "ordEmail", 		width: 120, cellClass: "text-left"}
+	];
+
+	var gridOptions = gagaAgGrid.getGridOptions(columnDefs);
+
+	// 셀 클릭 이벤트
+	gridOptions.onCellClicked = function(event) {
+		if (event.colDef.field == 'ordNo') {
+			// 주문 상세
+			cfnOpenOrderDetailPopup(event.data.ordNo);
+		} else if (event.colDef.field == 'goodsCd') {
+			// 상품 상세
+			cfnOpenGoodsDetailPopup('U', event.data.goodsCd);
+		}
+	};
+
+	// 조회
+	$('#btnSearch').on('click', function() {
+		// Fetch data
+		//gagaAgGrid.fetch($('#searchForm').prop('action'), gridOptions, '#searchForm');
+		fnSearchList();
+	});
+
+	/*************************************************************************
+	*  조회 
+	**************************************************************************/
+	var fnSearchList = function() {
+		
+		var searchChk = "N";
+		
+
+		if ($('#searchForm input[name=ordNo]').val() != '') {
+			searchChk = "Y";
+		}		
+		
+		if ($('#searchForm input[name=ordChgSq]').val() != '') {
+			searchChk = "Y";
+		}
+		
+		
+		if(searchChk == "N"){
+			if($('#stDate').val() == ''){
+				mcxDialog.alert('시작 기간을 입력하세요.');
+				return;
+			}
+	
+			if($('#edDate').val() == ''){
+				mcxDialog.alert('종료 기간을 입력하세요.');
+				return;
+			}
+			// 날짜 유효성 체크
+			if (Number($('#stDate').val().replaceAll("-", "")) > Number($('#edDate').val().replaceAll("-", ""))) {
+				mcxDialog.alert("시작일은 종료일보다 클 수 없습니다.");
+				return;
+			}			
+		}
+
+		gagaPaging.init('searchForm', fnSearchCallBack, 'delvWithdrawListPagination', $('#searchForm').find('#pageSize').val());
+	    gagaPaging.load($("#searchForm input[name=pageNo]").val());
+	}
+	
+	/*************************************************************************
+	*  조회 콜백
+	**************************************************************************/
+	var fnSearchCallBack = function(result){
+
+		$('#searchForm').find('#gridRowTotalCount').html(result.pageing.pageable.totalCount.addComma());
+		$('#searchForm').find('#pageNo').val(result.pageing.pageable.pageNo.addComma());
+		$('#searchForm').find('#pgNo').html(result.pageing.pageable.pageNo.addComma());
+		$('#searchForm').find('#endPgNo').html(result.pageing.pageable.totalPage.addComma());
+		gridOptions.api.setRowData(result.directList);
+		gagaPaging.createPagination(result.pageing.pageable);
+		
+	}
+	
+	/*************************************************************************
+	*  재회수지시
+	**************************************************************************/	
+	var fnReRecallOrder = function(chgGb, ordDtlNo,ordChgSq ){
+		mcxDialog.confirm("재회수지시 하시겠습니까?", {
+		    cancelBtnText: "취소",
+		    sureBtnText: "확인",
+		    sureBtnClick: function() {
+	            var param = new Object;
+	            param.chgGb    = chgGb;
+	            param.ordDtlNo = ordDtlNo;
+	            param.ordChgSq = ordChgSq;
+	            var jsonData = JSON.stringify(param);
+	            gagajf.ajaxJsonSubmit('/withdraw/direct/recallorder', jsonData, fnSearchList);
+	        }
+		});
+	}
+
+	//엑셀다운로드
+	$('#btnExcel').on('click', function() {
+		gagaAgGrid.exportToExcel('회수지시 목록', gridOptions);
+		
+		var totalRows = gridOptions.api.getDisplayedRowCount();
+		if(totalRows==0){
+			mcxDialog.alert('조회된 내역이 없습니다.');
+			return;
+		}
+
+		var date = new Date().format("YYYYMMDDHHmmss");
+		var params = {
+			fileName : "회수지시목록_"+ date,
+			sheetName: "DATA"
+		}
+		gridOptions.excelStyles = [
+			{
+				id: 'dateFormat',
+				dataType: 'dateTime',
+				numberFormat: {
+					format: 'YYYY-MM-DD;@'
+				}
+			},
+			{
+				id: 'textFormat',
+				dataType: 'string'
+			}
+		]
+		gridOptions.api.exportDataAsExcel(params);
+		
+	});
+
+	$(document).ready(function() {
+		// Create a agGrid
+		gagaAgGrid.createGrid('gridList', gridOptions);
+		var hideList = ["btnThisWeek", "btnYesterWeek", "btnThisMonth", "btnYesterMonth", "btnRecent3Month"];
+		cfnCreateCalendar('#terms', 'stDate', 'edDate', true, '','',  hideList);
+		// grid 높이 조절
+		//uifnFitGrid('auto');
+		gagajf.setDate('#terms', 'stDate', 'edDate', 't');
+
+		//fnDatepickerDisabled();
+	});
+
+/*]]>*/
+</script>
+
+</html>

+ 1 - 1
src/main/webapp/WEB-INF/views/withdraw/WmsWithdrawListForm.html

@@ -336,4 +336,4 @@
 
 /*]]>*/
 </script>
-</html>
+</html>

+ 62 - 0
src/main/webapp/ux/js/admin.popup.js

@@ -1,3 +1,65 @@
+/*
+ * Popup Java Script
+ * 
+ * 모든 팝업은 공통으로 사용할 수 있기 때문에 여기에 함수를 등록해 처리한다.
+ * 
+ * Copyright (c) 2014 gagamel (exrkorea.com)
+ *
+ * $Date: 2014-06-13$
+ */
+
+/**
+ * @type   : function
+ * @access : public
+ * @desc   : 팝업창 window.open 에서 사용되는 방식으로 features 설정
+ * <pre>
+ *     cfOpenWindowPopup('/popup.do?cmd=getIDPassword', 'popup', 710, 610);
+ *     
+ *     or
+ *     
+ *     cfOpenWindowPopup('/popup.do?cmd=getIDPassword', 'popup', 710, 610, 1, 400, 200, 'no', '');
+ * </pre>
+ * @param  : theURL - 새창의 Url
+ * @param  : winName - 새창의 name
+ * @param  : width	- 넓이
+ * @param  : height - 높이
+ * @param  : center - 위치센터여부 1: 센터 else 임의 0
+ * @param  : left - center 1 이 아닐 경우 세팅
+ * @param  : top - center 1 이 아닐 경우 세팅
+ * @param  : scrollbars - 스크롤 사용여부 'yes' or 'no'
+ * @param  : resizable - 사이즈 조정여부 'yes' or 'no'
+ * @param  : fstate - 새창의 기타 세부 설정
+ * @return : None
+ */
+function cfOpenWindowPopup(theURL, winName, width, height, center, left, top, scrollbars, resizable, fstate) {
+	var features = "width=" + width;
+	features += ",height=" + height;
+
+	var state = "";
+	if (center == undefined) center = 1;
+	if (scrollbars == undefined) scrollbars = 'no';
+	if (fstate == undefined) fstate = '';
+	if (left == undefined) left = 100;
+	if (top == undefined) top = 100;
+	if (resizable == undefined) resizable = 'no';
+		
+	if (center == 1) {
+		if (fstate == "") {
+			state = features + ", left=" + (screen.width-width)/2 + ",top=" + (screen.height-height)/2+",scrollbars=" + scrollbars + ",resizable=" + resizable + ",toolbar=0,menubar=0";
+		} else {
+			state = fstate + ", " + features + ", left=" + (screen.width-width)/2 + ",top=" + (screen.height-height)/2+",scrollbars=" + scrollbars + ",resizable=" + resizable + ",toolbar=0,menubar=0";
+		}
+	} else {
+		if (fstate == "") {
+			state = features + ", left=" + left + ",top=" + top +",scrollbars=" + scrollbars + ",resizable=" + resizable + ",toolbar=0,menubar=0";
+		} else {
+			state = fstate + ", " + features + ", left=" + left + ",top=" + top +",scrollbars=" + scrollbars + ",resizable=" + resizable + ",toolbar=0,menubar=0";
+		}
+	}
+
+	var win = window.open(theURL, winName, state);
+	win.focus();
+}
 
 /**
  * @type   : function