Browse Source

마케팅메일일 때 상품메일내용 HTML 설정에 따른 메일템플릿관련 전반적 수정

gagamel 5 năm trước cách đây
mục cha
commit
18e92df6df

+ 0 - 32
src/main/java/com/style24/core/biz/dao/NetpathyMailDao.java

@@ -1,11 +1,6 @@
 package com.style24.core.biz.dao;
 
-import java.util.Collection;
-
 import com.style24.core.support.annotation.ShopDs;
-import com.style24.persistence.domain.MailTemplate;
-import com.style24.persistence.domain.MailTemplateCorner;
-import com.style24.persistence.domain.MailTemplateGoods;
 import com.style24.persistence.domain.Netpathy;
 
 /**
@@ -17,33 +12,6 @@ import com.style24.persistence.domain.Netpathy;
 @ShopDs
 public interface NetpathyMailDao {
 
-	/**
-	 * 메일템플릿 조회
-	 * @param mailtSq - 메일템플릿번호
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 10
-	 */
-	MailTemplate getMailTemplate(Integer mailtSq);
-
-	/**
-	 * 메일템플릿코너 목록
-	 * @param mailtSq - 메일템플릿일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 11
-	 */
-	Collection<MailTemplateCorner> getMailTemplateCornerList(Integer mailtSq);
-
-	/**
-	 * 메일템플릿코너상품 목록
-	 * @param mailtcSq - 메일템플릿코너일련번호
-	 * @return
-	 * @author gagamel
-	 * @since 2021. 5. 11
-	 */
-	Collection<MailTemplateGoods> getMailTemplateCornerGoodsList(Integer mailtcSq);
-
 	/**
 	 * 메일 생성
 	 * @param netpathy - 넷퍼시메일 정보

+ 55 - 0
src/main/java/com/style24/core/biz/dao/TscMailTemplateDao.java

@@ -0,0 +1,55 @@
+package com.style24.core.biz.dao;
+
+import java.util.Collection;
+
+import com.style24.core.support.annotation.ShopDs;
+import com.style24.persistence.domain.MailTemplate;
+import com.style24.persistence.domain.MailTemplateCorner;
+import com.style24.persistence.domain.MailTemplateGoods;
+
+/**
+ * 메일템플릿 Dao
+ * 
+ * @author gagamel
+ * @since 2021. 5. 28
+ */
+@ShopDs
+public interface TscMailTemplateDao {
+
+	/**
+	 * 메일템플릿 정보
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	MailTemplate getMailTemplate(Integer mailtSq);
+
+	/**
+	 * 메일템플릿코너 목록
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	Collection<MailTemplateCorner> getMailTemplateCornerList(Integer mailtSq);
+
+	/**
+	 * 메일템플릿코너상품 목록
+	 * @param mailtcSq - 메일템플릿코너일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	Collection<MailTemplateGoods> getMailTemplateCornerGoodsList(Integer mailtcSq);
+
+	/**
+	 * 메일템플릿 미리보기 조회
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	MailTemplate getMailTemplatePreview(Integer mailtSq);
+
+}

+ 505 - 0
src/main/java/com/style24/core/biz/service/TscMailTemplateService.java

@@ -0,0 +1,505 @@
+package com.style24.core.biz.service;
+
+import java.util.Collection;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import com.style24.core.biz.dao.TscMailTemplateDao;
+import com.style24.persistence.domain.MailTemplate;
+import com.style24.persistence.domain.MailTemplateCorner;
+import com.style24.persistence.domain.MailTemplateGoods;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 메일템플릿 Service
+ *
+ * @author gagamel
+ * @since 2021. 5. 28
+ */
+
+@Service
+@Slf4j
+public class TscMailTemplateService {
+
+	@Value("${upload.goods.view}")
+	private String uploadGoodsView;
+
+	@Autowired
+	private TscMailTemplateDao mailTemplateDao;
+
+	/**
+	 * 메일템플릿 정보
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	public MailTemplate getMailTemplate(Integer mailtSq) {
+		return mailTemplateDao.getMailTemplate(mailtSq);
+	}
+
+	/**
+	 * 메일템플릿코너 목록
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	public Collection<MailTemplateCorner> getMailTemplateCornerList(Integer mailtSq) {
+		// 메일템플릿코너 목록
+		Collection<MailTemplateCorner> mtcList = mailTemplateDao.getMailTemplateCornerList(mailtSq);
+
+		if (mtcList != null && !mtcList.isEmpty()) {
+			for (MailTemplateCorner mtc : mtcList) {
+				// 메일템플릿코너상품 목록
+				mtc.setMailtcGoodsList(mailTemplateDao.getMailTemplateCornerGoodsList(mtc.getMailtcSq()));
+			}
+		}
+
+		return mtcList;
+	}
+
+	/**
+	 * 메일템플릿 미리보기 조회
+	 * @param mailtSq - 메일템플릿일련번호
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 11
+	 */
+	public MailTemplate getMailTemplatePreview(Integer mailtSq) {
+		MailTemplate mailTemplate = mailTemplateDao.getMailTemplatePreview(mailtSq);
+
+		// 마케팅메일이면
+		if (mailTemplate.getMailtGb().equals("M")) {
+			// 메일템플릿코너 목록
+			Collection<MailTemplateCorner> mtcList = mailTemplateDao.getMailTemplateCornerList(mailtSq);
+
+			if (mtcList != null && !mtcList.isEmpty()) {
+				StringBuilder goodsContent = new StringBuilder();
+
+				for (MailTemplateCorner mtc : mtcList) {
+					// 메일템플릿코너상품 목록
+					Collection<MailTemplateGoods> mtcgList = mailTemplateDao.getMailTemplateCornerGoodsList(mtc.getMailtcSq());
+
+					// 메일템플릿코너별 상품HTML 설정
+					goodsContent.append(this.getGoodsHtml(mtc, mtcgList));
+				}
+
+				mailTemplate.setGoodsMailContent(goodsContent.toString());
+			}
+		}
+
+		return mailTemplate;
+	}
+
+	/**
+	 * 마케팅메일용 상품HTML 조회
+	 * @param mtc - 메일템플릿코너 정보
+	 * @param mtcgList - 메일템플릿코너상품 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 5. 27
+	 */
+	private String getGoodsHtml(MailTemplateCorner mtc, Collection<MailTemplateGoods> mtcgList) {
+		// 메일템플릿코너 미리보기 내용 설정
+		StringBuilder sb = new StringBuilder();
+		sb.append("<table class=\"tabletabl\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" style=\"border:0;border-collapse:separate;border-spacing:0;margin:0;min-width:700px;outline:0;padding:0;font-family: '나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic,'돋움',Dotum,Helvetica,'Apple SD Gothic Neo',Sans-serif;letter-spacing: -0.025em;\">\n");
+		sb.append("	<tbody>\n");
+		sb.append("		<tr>\n");
+		sb.append("			<td width=\"60px;\" bgcolor=\"#ffffff\" style=\"background: #ffffff;\"></td>\n");
+		sb.append("			<td width=\"580px;\" bgcolor=\"#ffffff\" style=\"background: #ffffff;\">\n");
+		sb.append("				<table style=\"width:100%;margin:0;padding:0;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+		sb.append("					<thead>\n");
+		sb.append("						<tr>\n");
+		sb.append("							<th colspan=\"2\" style=\"text-align:center;line-height: 1;font-size: 29px;font-weight: bold;letter-spacing: -0.067em;color:#222222;font-family: 'Apple SD Gothic Neo','나눔고딕',NanumGothic,'맑은고딕',Malgun Gothic, Helvetica, sans-serif;\">").append(mtc.getMailtcNm()).append("</th>\n");
+		sb.append("						</tr>\n");
+		sb.append("					</thead>\n");
+		sb.append("					<tbody>\n");
+		sb.append("						<tr>\n");
+		sb.append("							<td colspan=\"2\" height=\"28px;\"></td>\n");
+		sb.append("						</tr>\n");
+		sb.append("					</tbody>\n");
+		sb.append("				</table>\n");
+
+		if (mtc.getGoodsCpr() == 1) {
+			sb.append("			<table style=\"width:100%;height:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+			sb.append("				<tbody>\n");
+
+			// 상품 목록
+			if (mtcgList != null && !mtcgList.isEmpty()) {
+				for (MailTemplateGoods mtcg : mtcgList) {
+					sb.append("			<tr>\n");
+					sb.append("				<td width=\"240px;\" height=\"360px;\" rowspan=\"6\" valign=\"top\" style=\"margin:0;padding:0;border-spacing:0;\">\n");
+					sb.append("					<a href=\"#none\" target=\"_blank\" style=\"margin:0;padding:0\">\n");
+					sb.append("						<span style=\"background: #f5f5f5;width: 240px;height: 360px;margin:0;padding:0\">\n");
+					sb.append("							<img src=\"http:").append(uploadGoodsView).append("/").append(mtcg.getSysImgNm()).append("\" alt=\"이미지\" style=\"width: 240px;height: 360px;display:block;margin:0;padding:0\"/>\n");
+					sb.append("						</span>\n");
+					sb.append("					</a>\n");
+					sb.append("				</td>\n");
+					sb.append("				<td width=\"40px;\" style=\"height: 40px;\"></td>\n");
+					sb.append("				<td valign=\"top\" height=\"0px;\" style=\"height:0px; padding: 0; margin: 0;border-spacing:0;\"></td>\n");
+					sb.append("			</tr>\n");
+					sb.append("			<tr>\n");
+					sb.append("				<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+					sb.append("				<td valign=\"top\" height=\"20px;\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+					sb.append("					<span style=\"color: #888888; line-height: 40px; font-size: 11px;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0;\">").append(mtcg.getBrandNm()).append("</span>\n");
+					sb.append("				</td>\n");
+					sb.append("			</tr>\n");
+					sb.append("			<tr>\n");
+					sb.append("				<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+					sb.append("				<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+					sb.append("					<a href=\"#none\" target=\"_blank\" style=\"display: block; color: #222222; font-size: 14px; font-weight: normal; letter-spacing: -0.025em; text-decoration: none;\">\n");
+					sb.append("						<span style=\"height:40px;color: #222222; font-size: 14px;font-weight: normal;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: block; display: -webkit-box;\">").append(mtcg.getGoodsNm()).append("</span>\n");
+					sb.append("					</a>\n");
+					sb.append("				</td>\n");
+					sb.append("			</tr>\n");
+					sb.append("			<tr>\n");
+					sb.append("				<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+					sb.append("				<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+					sb.append("					<span style=\"color: #222222; font-size: 16px; font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.025em; display: inline-block; width:auto; padding-top:0; padding-bottom:0; padding-left:0; padding-right: 6px; text-align: left;\">").append(String.format("%,d", mtcg.getCurrPrice())).append("</span>\n");
+					sb.append("					<span style=\"color: #888888; font-size: 14px; text-decoration: line-through;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.025em; display: inline-block; width:auto; text-align: left;\">").append(String.format("%,d", mtcg.getListPrice())).append("</span>\n");
+					sb.append("					<span style=\"color: #fd4802; font-size: 16px; font-weight: bold;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.05em; display: inline-block; width:50px; text-align: right;\">").append(mtcg.getDcRate()).append("%</span>\n");
+					sb.append("				</td>\n");
+					sb.append("			</tr>\n");
+
+					// 상품혜택정보
+					if (StringUtils.isNotBlank(mtcg.getBenefits())) {
+						sb.append("		<tr>\n");
+						sb.append("			<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+						sb.append("			<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+
+						String[] arrBenefit = mtcg.getBenefits().split(",");
+						for (String benefit : arrBenefit) {
+							sb.append("			<span style=\"width: auto; height: 20px;text-align: center;line-height:18px; display: inline-block; padding-top:0;padding-bottom:0;padding-left:5px;padding-right:5px; font-size:9px; color: #888888; background: #f5f5f5; border-width: 1px; border-style: solid; border-color: #f5f5f5; box-sizing: border-box;\">").append(benefit).append("</span>\n");
+						}
+
+						sb.append("			</td>\n");
+						sb.append("		</tr>\n");
+					}
+
+					// 상품타이틀명(세일링문구)
+					if (StringUtils.isNotBlank(mtcg.getGoodsTnm())) {
+						sb.append("		<tr>\n");
+						sb.append("			<td width=\"40px;\" style=\"height: 60px;\"></td>\n");
+						sb.append("			<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+						sb.append("				<span style=\"color: #fd4802;font-size: 14px; line-height: 18px; font-weight: bold;letter-spacing: -0.05em;\">").append(mtcg.getGoodsTnm()).append("</span>\n");
+						sb.append("			</td>\n");
+						sb.append("		</tr>\n");
+					}
+
+					sb.append("			<tr>\n");
+					sb.append("				<td height=\"30px;\" colspan=\"3\" style=\"height: 30px;border-spacing:0;\"></td>\n");
+					sb.append("			</tr>\n");
+				}
+			}
+
+			sb.append("				</tbody>\n");
+			sb.append("			</table>\n");
+		} else if (mtc.getGoodsCpr() == 2) {
+			sb.append("			<table style=\"width:100%;height:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+			sb.append("				<tbody>\n");
+
+			// 상품 목록
+			if (mtcgList != null && !mtcgList.isEmpty()) {
+				int idx = 1;
+				for (MailTemplateGoods mtcg : mtcgList) {
+					if (idx % 2 == 1) {
+						sb.append("		<tr>\n");
+					} else {
+						sb.append("			<td width=\"20px;\" height=\"420px;\" style=\"width: 20px;display: block;margin:0;padding:0\"></td>\n");
+					}
+
+					sb.append("				<td width=\"280px;\" height=\"660px;\" colspan=\"2\" style=\"margin:0;padding:0\">\n");
+					sb.append("					<a href=\"#none\" target=\"_blank\" style=\"margin:0;padding:0;text-decoration: none;\">\n");
+					sb.append("						<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:0; padding-right: 0px;\">\n");
+					sb.append("							<span style=\"background: #f5f5f5;width: 280px;height: 420px;display: block;margin:0;padding:0\">\n");
+					sb.append("								<img src=\"http:").append(uploadGoodsView).append("/").append(mtcg.getSysImgNm()).append("\" alt=\"이미지\" style=\"width: 280px;height: 420px; margin:0;padding:0\"/>\n");
+					sb.append("							</span>\n");
+					sb.append("						</span>\n");
+					sb.append("						<span style=\"display: block; width: 100%; height: 40px; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+					sb.append("							<span style=\"color: #888888; height:40px; line-height: 40px; font-size: 11px;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; text-align: left; margin:0;padding-left:0px; padding-right: 0px;\">").append(mtcg.getBrandNm()).append("</span>\n");
+					sb.append("						</span>\n");
+					sb.append("						<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+					sb.append("							<span style=\"height:40px; color: #222222; font-size: 14px;font-weight: normal;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: block; display: -webkit-box;\">").append(mtcg.getGoodsNm()).append("</span>\n");
+					sb.append("						</span>\n");
+					sb.append("						<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+					sb.append("							<span style=\"height:40px; line-height:40px; color: #222222; font-size: 16px; font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; display: inline-block; width:auto; padding-top:0; padding-bottom:0; padding-left:0px; padding-right: 10px; text-align: left;\">").append(String.format("%,d", mtcg.getCurrPrice())).append("</span>\n");
+					sb.append("							<span style=\"height:40px; line-height:40px; color: #888888; font-size: 14px; text-decoration: line-through;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; display: inline-block; width:auto; text-align: left;\">").append(String.format("%,d", mtcg.getListPrice())).append("</span>\n");
+					sb.append("							<span style=\"height:40px; line-height:40px; color: #fd4802; font-size: 16px; font-weight: bold;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.05em; display: table-cell; width:50%; float: right; text-align: right;\">").append(mtcg.getDcRate()).append("%</span>\n");
+					sb.append("						</span>\n");
+
+					// 상품혜택정보
+					if (StringUtils.isNotBlank(mtcg.getBenefits())) {
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+
+						String[] arrBenefit = mtcg.getBenefits().split(",");
+						for (String benefit : arrBenefit) {
+							sb.append("					<span style=\"width: auto; height: 20px;text-align: center;line-height:18px; display: inline-block; padding-top:0;padding-bottom:0;padding-left:5px;padding-right:5px; font-size:9px; color: #888888; background: #f5f5f5; border-width: 1px; border-style: solid; border-color: #f5f5f5; box-sizing: border-box;\">").append(benefit).append("</span>\n");
+						}
+
+						sb.append("					</span>\n");
+					}
+
+					// 상품타이틀명(세일링문구)
+					if (StringUtils.isNotBlank(mtcg.getGoodsTnm())) {
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+						sb.append("						<span style=\"color: #fd4802;font-size: 14px; line-height: 40px; height: 40px; font-weight: bold;letter-spacing: -0.05em;\">").append(mtcg.getGoodsTnm()).append("</span>\n");
+						sb.append("					</span>\n");
+					}
+
+					sb.append("					</a>\n");
+					sb.append("				</td>\n");
+
+					if (idx % 2 == 0) {
+						sb.append("		</tr>\n");
+						sb.append("		<tr>\n");
+						sb.append("			<td height=\"20px;\" style=\"height: 20px;\"></td>\n");
+						sb.append("		</tr>\n");
+					}
+
+					idx++;
+				}
+			}
+
+			sb.append("				</tbody>\n");
+			sb.append("			</table>\n");
+		} else if (mtc.getGoodsCpr() == 3) {
+			sb.append("			<table style=\"width:100%;height:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+			sb.append("				<tbody>\n");
+
+			// 상품 목록
+			if (mtcgList != null && !mtcgList.isEmpty()) {
+				int idx = 1;
+				for (MailTemplateGoods mtcg : mtcgList) {
+					if (idx % 3 == 1) {
+						sb.append("		<tr>\n");
+					} else {
+						sb.append("			<td width=\"20px;\" height=\"420px;\" style=\"width: 20px;display: block;margin:0;padding:0\"></td>\n");
+					}
+
+					sb.append("				<td width=\"180px;\" height=\"430px;\" colspan=\"2\" style=\"margin:0;padding:0\">\n");
+					sb.append("					<a href=\"#none\" target=\"_blank\" style=\"margin:0;padding:0;text-decoration: none;\">\n");
+					sb.append("						<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:0; padding-right: 0px;\">\n");
+					sb.append("							<span style=\"background: #f5f5f5;width: 180px;height: 270px;display: block;margin:0;padding:0\">\n");
+					sb.append("								<img src=\"http:").append(uploadGoodsView).append("/").append(mtcg.getSysImgNm()).append("\" alt=\"이미지\" style=\"width: 180px;height: 270px; margin:0;padding:0\"/>\n");
+					sb.append("							</span>\n");
+					sb.append("						</span>\n");
+					sb.append("						<span style=\"display: block; width: 100%; height: 40px; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+					sb.append("							<span style=\"color: #888888; height:40px; line-height: 40px; font-size: 11px;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; text-align: left; margin:0;padding-left:0px; padding-right: 0px;\">").append(mtcg.getBrandNm()).append("</span>\n");
+					sb.append("						</span>\n");
+					sb.append("						<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+					sb.append("							<span style=\"height:40px; color: #222222; font-size: 14px;font-weight: normal;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: block; display: -webkit-box;\">").append(mtcg.getGoodsNm()).append("</span>\n");
+					sb.append("						</span>\n");
+					sb.append("						<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+					sb.append("							<span style=\"height:40px; line-height:40px; color: #222222; font-size: 16px; font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; display: inline-block; width:auto; padding-top:0; padding-bottom:0; padding-left:0px; padding-right: 10px; text-align: left;\">").append(String.format("%,d", mtcg.getCurrPrice())).append("</span>\n");
+					sb.append("							<span style=\"height:40px; line-height:40px; color: #888888; font-size: 14px; text-decoration: line-through;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; display: inline-block; width:auto; text-align: left;\">").append(String.format("%,d", mtcg.getListPrice())).append("</span>\n");
+					sb.append("							<span style=\"height:40px; line-height:40px; color: #fd4802; font-size: 16px; font-weight: bold;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.05em; display: table-cell; width:50%; float: right; text-align: right;\">").append(mtcg.getDcRate()).append("%</span>\n");
+					sb.append("						</span>\n");
+
+					// 상품혜택정보
+					if (StringUtils.isNotBlank(mtcg.getBenefits())) {
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+
+						String[] arrBenefit = mtcg.getBenefits().split(",");
+						for (String benefit : arrBenefit) {
+							sb.append("					<span style=\"width: auto; height: 20px;text-align: center;line-height:18px; display: inline-block; padding-top:0;padding-bottom:0;padding-left:5px;padding-right:5px; font-size:9px; color: #888888; background: #f5f5f5; border-width: 1px; border-style: solid; border-color: #f5f5f5; box-sizing: border-box;\">").append(benefit).append("</span>\n");
+						}
+
+						sb.append("					</span>\n");
+					}
+
+					// 상품타이틀명(세일링문구)
+					if (StringUtils.isNotBlank(mtcg.getGoodsTnm())) {
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+						sb.append("						<span style=\"color: #fd4802;font-size: 14px; line-height: 40px; height: 40px; font-weight: bold;letter-spacing: -0.05em;\">").append(mtcg.getGoodsTnm()).append("</span>\n");
+						sb.append("					</span>\n");
+					}
+
+					sb.append("					</a>\n");
+					sb.append("				</td>\n");
+
+					if (idx % 3 == 0) {
+						sb.append("		</tr>\n");
+						sb.append("		<tr>\n");
+						sb.append("			<td height=\"20px;\" style=\"height: 20px;\"></td>\n");
+						sb.append("		</tr>\n");
+					}
+
+					idx++;
+				}
+			}
+
+			sb.append("				</tbody>\n");
+			sb.append("			</table>\n");
+		} else if (mtc.getGoodsCpr() == 4) {
+			// 상품 목록
+			if (mtcgList != null && !mtcgList.isEmpty()) {
+				int idx = 1;
+
+				for (MailTemplateGoods mtcg : mtcgList) {
+					if (idx % 4 == 1) {
+						sb.append("<table style=\"width:100%;height:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+						sb.append("	<tbody>\n");
+						sb.append("		<tr>\n");
+						sb.append("			<td width=\"240px;\" height=\"360px;\" rowspan=\"6\" valign=\"top\" style=\"margin:0;padding:0;border-spacing:0;\">\n");
+						sb.append("				<a href=\"#none\" target=\"_blank\" style=\"margin:0;padding:0\">\n");
+						sb.append("					<span style=\"background: #f5f5f5;width: 240px;height: 360px;margin:0;padding:0\">\n");
+						sb.append("						<img src=\"http:").append(uploadGoodsView).append("/").append(mtcg.getSysImgNm()).append("\" alt=\"이미지\" style=\"width: 240px;height: 360px;display:block;margin:0;padding:0\"/>\n");
+						sb.append("					</span>\n");
+						sb.append("				</a>\n");
+						sb.append("			</td>\n");
+						sb.append("			<td width=\"40px;\" style=\"height: 40px;\"></td>\n");
+						sb.append("			<td valign=\"top\" height=\"0px;\" style=\"height:0px; padding: 0; margin: 0;border-spacing:0;\"></td>\n");
+						sb.append("		</tr>\n");
+						sb.append("		<tr>\n");
+						sb.append("			<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+						sb.append("			<td valign=\"top\" height=\"20px;\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+						sb.append("				<span style=\"color: #888888; line-height: 40px; font-size: 11px;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0;\">").append(mtcg.getBrandNm()).append("</span>\n");
+						sb.append("			</td>\n");
+						sb.append("		</tr>\n");
+						sb.append("		<tr>\n");
+						sb.append("			<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+						sb.append("			<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+						sb.append("				<a href=\"#none\" target=\"_blank\" style=\"display: block; color: #222222; font-size: 14px; font-weight: normal; letter-spacing: -0.025em; text-decoration: none;\">\n");
+						sb.append("					<span style=\"height:40px;color: #222222; font-size: 14px;font-weight: normal;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: block; display: -webkit-box;\">").append(mtcg.getGoodsNm()).append("</span>\n");
+						sb.append("				</a>\n");
+						sb.append("			</td>\n");
+						sb.append("		</tr>\n");
+						sb.append("		<tr>\n");
+						sb.append("			<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+						sb.append("			<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+						sb.append("				<span style=\"color: #222222; font-size: 16px; font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.025em; display: inline-block; width:auto; padding-top:0; padding-bottom:0; padding-left:0; padding-right: 6px; text-align: left;\">").append(String.format("%,d", mtcg.getCurrPrice())).append("</span>\n");
+						sb.append("				<span style=\"color: #888888; font-size: 14px; text-decoration: line-through;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.025em; display: inline-block; width:auto; text-align: left;\">").append(String.format("%,d", mtcg.getListPrice())).append("</span>\n");
+						sb.append("				<span style=\"color: #fd4802; font-size: 16px; font-weight: bold;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;line-height:20px;letter-spacing: -0.05em; display: inline-block; width:50px; text-align: right;\">").append(mtcg.getDcRate()).append("%</span>\n");
+						sb.append("			</td>\n");
+						sb.append("		</tr>\n");
+
+						// 상품혜택정보
+						if (StringUtils.isNotBlank(mtcg.getBenefits())) {
+							sb.append("		<tr>\n");
+							sb.append("			<td width=\"40px;\" style=\"height: 20px;\"></td>\n");
+							sb.append("			<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+
+							String[] arrBenefit = mtcg.getBenefits().split(",");
+							for (String benefit : arrBenefit) {
+								sb.append("				<span style=\"width: auto; height: 20px;text-align: center;line-height:18px; display: inline-block; padding-top:0;padding-bottom:0;padding-left:5px;padding-right:5px; font-size:9px; color: #888888; background: #f5f5f5; border-width: 1px; border-style: solid; border-color: #f5f5f5; box-sizing: border-box;\">").append(benefit).append("</span>\n");
+							}
+
+							sb.append("			</td>\n");
+							sb.append("		</tr>\n");
+						}
+
+						// 상품타이틀명(세일링문구)
+						if (StringUtils.isNotBlank(mtcg.getGoodsTnm())) {
+							sb.append("		<tr>\n");
+							sb.append("			<td width=\"40px;\" style=\"height: 60px;\"></td>\n");
+							sb.append("			<td valign=\"top\" style=\"padding: 0; margin: 0;border-spacing:0;\">\n");
+							sb.append("				<span style=\"color: #fd4802;font-size: 14px; line-height: 18px; font-weight: bold;letter-spacing: -0.05em;\">").append(mtcg.getGoodsTnm()).append("</span>\n");
+							sb.append("			</td>\n");
+							sb.append("		</tr>\n");
+						}
+
+						sb.append("		<tr>\n");
+						sb.append("			<td height=\"30px;\" colspan=\"3\" style=\"height: 30px;border-spacing:0;\"></td>\n");
+						sb.append("		</tr>\n");
+						sb.append("	</tbody>\n");
+						sb.append("</table>\n");
+					} else {
+						sb.append("<table style=\"width:100%;height:100%;margin:0;padding:0;font-size: 14px;\" cellspacing=\"0\" cellpadding=\"0\">\n");
+						sb.append("	<tbody>\n");
+
+						if (idx % 4 == 2) {
+							sb.append("		<tr>\n");
+						} else {
+							sb.append("			<td width=\"20px;\" height=\"420px;\" style=\"width: 20px;display: block;margin:0;padding:0\"></td>\n");
+						}
+
+						sb.append("			<td width=\"180px;\" height=\"430px;\" colspan=\"2\" style=\"margin:0;padding:0\">\n");
+						sb.append("				<a href=\"#none\" target=\"_blank\" style=\"margin:0;padding:0;text-decoration: none;\">\n");
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:0; padding-right: 0px;\">\n");
+						sb.append("						<span style=\"background: #f5f5f5;width: 180px;height: 270px;display: block;margin:0;padding:0\">\n");
+						sb.append("							<img src=\"http:").append(uploadGoodsView).append("/").append(mtcg.getSysImgNm()).append("\" alt=\"이미지\" style=\"width: 180px;height: 270px; margin:0;padding:0\"/>\n");
+						sb.append("						</span>\n");
+						sb.append("					</span>\n");
+						sb.append("					<span style=\"display: block; width: 100%; height: 40px; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+						sb.append("						<span style=\"color: #888888; height:40px; line-height: 40px; font-size: 11px;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; text-align: left; margin:0;padding-left:0px; padding-right: 0px;\">").append(mtcg.getBrandNm()).append("</span>\n");
+						sb.append("					</span>\n");
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+						sb.append("						<span style=\"height:40px; color: #222222; font-size: 14px;font-weight: normal;line-height:20px;letter-spacing: -0.025em; text-align: left; margin:0; overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; -webkit-box-orient: vertical; display: block; display: -webkit-box;\">").append(mtcg.getGoodsNm()).append("</span>\n");
+						sb.append("					</span>\n");
+						sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+						sb.append("						<span style=\"height:40px; line-height:40px; color: #222222; font-size: 16px; font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; display: inline-block; width:auto; padding-top:0; padding-bottom:0; padding-left:0px; padding-right: 10px; text-align: left;\">").append(String.format("%,d", mtcg.getCurrPrice())).append("</span>\n");
+						sb.append("						<span style=\"height:40px; line-height:40px; color: #888888; font-size: 14px; text-decoration: line-through;font-weight: normal;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.025em; display: inline-block; width:auto; text-align: left;\">").append(String.format("%,d", mtcg.getListPrice())).append("</span>\n");
+						sb.append("						<span style=\"height:40px; line-height:40px; color: #fd4802; font-size: 16px; font-weight: bold;font-family:'Trebuchet MS','Bahnschrift','Times New', verdana,Arial, Helvetica, sans-serif;letter-spacing: -0.05em; display: table-cell; width:50%; float: right; text-align: right;\">").append(mtcg.getDcRate()).append("%</span>\n");
+						sb.append("					</span>\n");
+
+						// 상품혜택정보
+						if (StringUtils.isNotBlank(mtcg.getBenefits())) {
+							sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+
+							String[] arrBenefit = mtcg.getBenefits().split(",");
+							for (String benefit : arrBenefit) {
+								sb.append("						<span style=\"width: auto; height: 20px;text-align: center;line-height:18px; display: inline-block; padding-top:0;padding-bottom:0;padding-left:5px;padding-right:5px; font-size:9px; color: #888888; background: #f5f5f5; border-width: 1px; border-style: solid; border-color: #f5f5f5; box-sizing: border-box;\">").append(benefit).append("</span>\n");
+							}
+
+							sb.append("					</span>\n");
+						}
+
+						// 상품타이틀명(세일링문구)
+						if (StringUtils.isNotBlank(mtcg.getGoodsTnm())) {
+							sb.append("					<span style=\"display: block; width: 100%; padding-top:0; padding-bottom:0; padding-left:5px; padding-right: 5px;\">\n");
+							sb.append("						<span style=\"color: #fd4802;font-size: 14px; line-height: 40px; height: 40px; font-weight: bold;letter-spacing: -0.05em;\">").append(mtcg.getGoodsTnm()).append("</span>\n");
+							sb.append("					</span>\n");
+						}
+
+						sb.append("				</a>\n");
+						sb.append("			</td>\n");
+
+						if (idx % 4 == 0) {
+							sb.append("		</tr>\n");
+							sb.append("		<tr>\n");
+							sb.append("			<td height=\"20px;\" style=\"height: 20px;\"></td>\n");
+							sb.append("		</tr>\n");
+							sb.append("	</tbody>\n");
+							sb.append("</table>\n");
+						}
+					}
+
+					idx++;
+				}
+			}
+		}
+
+		// 버튼
+		sb.append("				<table style=\"width:100%;margin:0;padding:0\" cellspacing=\"0\" cellpadding=\"0\">\n");
+		sb.append("					<tbody>\n");
+		sb.append("						<tr>\n");
+		sb.append("							<td colspan=\"3\" width=\"179px;\" height=\"60px\" valign=\"bottom\"></td>\n");
+		sb.append("							<td width=\"222px;\" height=\"60px;\" valign=\"bottom\" bgcolor=\"#ffffff\" style=\"background: #ffffff; text-align: center;margin:0;padding:0;border-spacing:0;\">\n");
+		sb.append("								<a href=\"").append(mtc.getMailtcLink()).append("\" target=\"_blank\" style=\"width:100%; height:100%; display: block; border-width: 1px; border-bottom-width: 1px;border-right-width: 1px;border-top-width: 1px;border-left-width: 1px; border-style: solid; border-color: #a7a7a7; box-sizing: border-box; padding: 20px; color: #222222; font-size: 17px; font-weight: 600; letter-spacing: -0.025em; text-decoration: none;\">더많은 상품 보기</a>\n");
+		sb.append("							</td>\n");
+		sb.append("							<td colspan=\"3\" width=\"179px;\" height=\"60px\" valign=\"bottom\"></td>\n");
+		sb.append("						</tr>\n");
+		sb.append("						<tr>\n");
+		sb.append("							<td height=\"20px;\" style=\"height: 20px;\"></td>\n");
+		sb.append("						</tr>\n");
+		sb.append("					</tbody>\n");
+		sb.append("				</table>\n");
+
+		sb.append("			</td>\n");
+		sb.append("			<td width=\"60px;\" bgcolor=\"#ffffff\" style=\"background: #ffffff;\"></td>\n");
+		sb.append("		</tr>\n");
+		sb.append("		<tr>\n");
+		sb.append("			<td width=\"100%\" height=\"60px;\" colspan=\"3\" bgcolor=\"#ffffff\" style=\"background: #ffffff;\"></td>\n");
+		sb.append("		</tr>\n");
+		sb.append("	</tbody>\n");
+		sb.append("</table>\n");
+
+		return sb.toString();
+	}
+
+}

+ 5 - 20
src/main/java/com/style24/core/biz/thirdparty/NetpathyMailSender.java

@@ -1,7 +1,6 @@
 package com.style24.core.biz.thirdparty;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 import javax.annotation.PostConstruct;
@@ -13,8 +12,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.core.biz.dao.NetpathyMailDao;
+import com.style24.core.biz.service.TscMailTemplateService;
 import com.style24.persistence.domain.MailTemplate;
-import com.style24.persistence.domain.MailTemplateCorner;
 import com.style24.persistence.domain.Netpathy;
 
 import lombok.extern.slf4j.Slf4j;
@@ -43,6 +42,9 @@ public class NetpathyMailSender {
 	@Autowired
 	private NetpathyMailDao netpathyDao;
 
+	@Autowired
+	private TscMailTemplateService mailTemplateService;
+
 	@PostConstruct
 	public void init() {
 //		domainUrl = env.getProperty("domain.front");
@@ -104,29 +106,12 @@ public class NetpathyMailSender {
 	 */
 	@Cacheable(value = "mailTemplate", key = "#mailtSq")
 	public MailTemplate getMailTemplate(Integer mailtSq, GagaMap replaceInfo) {
-		MailTemplate mailTemplate = netpathyDao.getMailTemplate(mailtSq);
+		MailTemplate mailTemplate = mailTemplateService.getMailTemplatePreview(mailtSq);
 
 		mailTemplate.setMailtNm(GagaStringUtil.replace(this.mergeData(mailTemplate.getMailtNm(), replaceInfo), "&gt;", ">"));
 		mailTemplate.setMailhContent(GagaStringUtil.replace(this.mergeData(mailTemplate.getMailhContent(), replaceInfo), "&gt;", ">"));
 		mailTemplate.setMailfContent(GagaStringUtil.replace(this.mergeData(mailTemplate.getMailfContent(), replaceInfo), "&gt;", ">"));
 
-		// 마케팅메일이면
-		if (mailTemplate.getMailtGb().equals("M")) {
-			// 메일템플릿코너 목록
-			Collection<MailTemplateCorner> mtcList = netpathyDao.getMailTemplateCornerList(mailtSq);
-
-			if (mtcList != null && !mtcList.isEmpty()) {
-				for (MailTemplateCorner mtc : mtcList) {
-					// 메일템플릿코너상품 목록
-					mtc.setMailtcGoodsList(netpathyDao.getMailTemplateCornerGoodsList(mtc.getMailtcSq()));
-				}
-			}
-
-//			replaceInfo.setString("", mtc)
-		}
-
-		mailTemplate.setMailContent(GagaStringUtil.replace(this.mergeData(mailTemplate.getMailContent(), replaceInfo), "&gt;", ">"));
-
 		return mailTemplate;
 	}
 

+ 1 - 0
src/main/java/com/style24/persistence/domain/MailTemplate.java

@@ -33,6 +33,7 @@ public class MailTemplate extends TscBaseDomain {
 	private Integer mailfSq;		// 메일푸터일련번호
 	private String mailfContent;	// 메일푸터내용
 	private String mailContent;		// 메일내용
+	private String goodsMailContent;// 상품메일내용
 
 	Collection<MailTemplateCorner> mailtcList;	// 메일템플릿코너 목록
 

+ 3 - 1
src/main/java/com/style24/persistence/domain/MailTemplateCorner.java

@@ -19,10 +19,12 @@ public class MailTemplateCorner extends TscBaseDomain {
 	private Integer mailtcSq;	// 메일템플릿코너번호
 	private Integer mailtSq;	// 메일템플릿일련번호
 	private String mailtcNm;	// 메일템플릿코너명
-	private Integer goodsCpr;	// 상품노출건수(한 행에 노출될 상품개수)
+	private int goodsCpr;		// 상품노출건수(한 행에 노출될 상품개수)
 	private String mailtcLink;	// 메일템플릿코너링크
 	private String useYn;		// 사용여부
 
 	Collection<MailTemplateGoods> mailtcGoodsList;	// 메일템플릿코너상품 목록
 
+	private String goodsHtml;	// 마케팅 상품리스트의 HTML
+
 }

+ 5 - 2
src/main/java/com/style24/persistence/domain/MailTemplateGoods.java

@@ -20,9 +20,12 @@ public class MailTemplateGoods extends TscBaseDomain {
 
 	private String brandNm;		// 브랜드명
 	private String goodsNm;		// 상품명
+	private String goodsTnm;	// 상품타이틀명(세일링문구)
 	private String goodsStat;	// 판매상태
-	private String listPrice;	// 정상가
-	private String currPrice;	// 판매가
+	private int listPrice;		// 정상가
+	private int currPrice;		// 판매가
+	private double dcRate;		// 할인율
 	private String sysImgNm;	// 이미지정보
+	private String benefits;	// 혜택들(,로 연결된 문자열)
 
 }

+ 0 - 49
src/main/java/com/style24/persistence/mybatis/shop/NetpathyMail.xml

@@ -2,55 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.style24.core.biz.dao.NetpathyMailDao">
 
-	<!-- 메일템플릿 조회 -->
-	<select id="getMailTemplate" parameterType="Integer" resultType="MailTemplate">
-		/* NetpathyMail.getMailTemplate */
-		SELECT A.MAILT_GB                        /*메일템플릿구분*/
-		     , A.MAILT_NM                        /*메일템플릿명*/
-		     , 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>
-	
-	<!-- 메일템플릿코너 목록 -->
-	<select id="getMailTemplateCornerList" parameterType="Integer" resultType="MailTemplateCorner">
-		/* NetpathyMail.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">
-		/* NetpathyMail.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="createMail" parameterType="Netpathy">
 		/* NetpathyMail.createMail */

+ 82 - 0
src/main/java/com/style24/persistence/mybatis/shop/TscMailTemplate.xml

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.style24.core.biz.dao.TscMailTemplateDao">
+
+	<!-- 메일템플릿 정보 -->
+	<select id="getMailTemplate" parameterType="Integer" resultType="MailTemplate">
+		/* TscMailTemplate.getMailTemplate */
+		SELECT MAILT_SQ     /*메일템플릿일련번호*/
+		     , MAILT_GB     /*메일템플릿구분*/
+		     , MAILH_SQ     /*메일헤더일련번호*/
+		     , MAILF_SQ     /*메일푸터일련번호*/
+		     , MAILT_NM     /*메일템플릿명*/
+		     , MAIL_CONTENT /*메일내용*/
+		FROM   TB_MAILT
+		WHERE  MAILT_SQ = #{mailtSq}
+	</select>
+	
+	<!-- 메일템플릿코너 목록 -->
+	<select id="getMailTemplateCornerList" parameterType="Integer" resultType="MailTemplateCorner">
+		/* TscMailTemplate.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">
+		/* TscMailTemplate.getMailTemplateCornerGoodsList */
+		SELECT M.MAILTC_SQ               /*메일템플릿코너일련번호*/
+		     , M.GOODS_CD                /*상품코드*/
+		     , B.BRAND_ENM AS BRAND_NM   /*브랜드명*/
+		     , G.GOODS_NM                /*상품명*/
+		     , G.GOODS_TNM               /*상품타이틀명*/
+		     , G.GOODS_STAT              /*상품상태*/
+		     , G.LIST_PRICE              /*정상가*/
+		     , G.CURR_PRICE              /*현재판매가*/
+		     , G.DC_RATE                 /*할인율*/
+		     , (SELECT MAX(SYS_IMG_NM)
+		        FROM   TB_GOODS_IMG
+		        WHERE  GOODS_CD = M.GOODS_CD
+		        AND    DEFAULT_IMG_YN = 'Y'
+		       )           AS SYS_IMG_NM /*상품이미지명*/
+		     , (SELECT GROUP_CONCAT(CASE WHEN BENEFIT_GB = '10' THEN '쿠폰할인'
+		                                 WHEN BENEFIT_GB = '20' THEN '무료배송'
+		                                 WHEN BENEFIT_GB = '30' THEN '사은품'
+		                                 WHEN BENEFIT_GB = '40' THEN '신상'
+		                                 WHEN BENEFIT_GB = '50' THEN '총알배송'
+		                            END  SEPARATOR ',')
+		        FROM   TB_GOODS_BENEFIT
+		        WHERE  GOODS_CD = M.GOODS_CD
+		       )           AS BENEFITS   /*혜택(,로연결된문자열)*/
+		     , 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>
+	
+	<!-- 메일템플릿 미리보기 조회 -->
+	<select id="getMailTemplatePreview" parameterType="Integer" resultType="MailTemplate">
+		/* TscMailTemplate.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>