Przeglądaj źródła

2/8 MK메일관리 임시커밋

ChoiSooHwan 5 lat temu
rodzic
commit
a558a6b0ca

+ 4 - 0
src/main/java/com/style24/admin/biz/dao/TsaMailTemplateDao.java

@@ -3,8 +3,10 @@ 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.MailTemplate;
 import com.style24.persistence.domain.MktmailManagement;
+import com.style24.persistence.domain.OrderSample;
 
 /**
  * 메일헤더푸터관리 Dao
@@ -57,5 +59,7 @@ public interface TsaMailTemplateDao {
 	 * @since 2021. 02. 05
 	 */
 	MktmailManagement getMktmailManagementDetail(Integer mktmailManagement);
+	
+	Collection<Goods> getOrderSampleGoodsInfo(Goods goods);
 
 }

+ 5 - 0
src/main/java/com/style24/admin/biz/service/TsaMailTemplateService.java

@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 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.MailTemplate;
 import com.style24.persistence.domain.MktmailManagement;
 
@@ -95,4 +96,8 @@ public class TsaMailTemplateService {
 		return mailtempletDao.getMktmailManagementDetail(mktmailManagement);
 	}
 	
+	/* 주문 샘플 데이터 (추후 삭제 예정) */
+	public Collection<Goods> getOrderSampleGoodsInfo(Goods goods) {
+		return mailtempletDao.getOrderSampleGoodsInfo(goods);
+	}
 }

+ 18 - 0
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -43,6 +43,7 @@ import com.style24.persistence.domain.Coupon;
 import com.style24.persistence.domain.CouponRefval;
 import com.style24.persistence.domain.CustCoupon;
 import com.style24.persistence.domain.FreeGoodsPromotion;
+import com.style24.persistence.domain.Goods;
 import com.style24.persistence.domain.MailTemplate;
 import com.style24.persistence.domain.MktmailManagement;
 import com.style24.persistence.domain.MoreBetter;
@@ -986,6 +987,23 @@ public class TsaMarketingController extends TsaBaseController {
 		return mav;
 	}
 	
+	/**
+	 * MKT 메일관리 상품추가 팝업
+	 * @param 
+	 * @return
+	 * @author csh9191
+	 * @since 2021. 02. 01
+	 */
+	
+	@PostMapping("/mktmailmanagement/goods/info")
+	@ResponseBody
+	public Collection<Goods> getOrderSampleGoodsInfo(@RequestBody String[] arrGoodsCd) {
+		Goods goods = new Goods();
+		goods.setArrGoodsCd(arrGoodsCd);
+		
+		return mailTemplateService.getOrderSampleGoodsInfo(goods);
+	}
+	
 	/* // CSB 진행 */
 
 	/**

+ 1 - 9
src/main/java/com/style24/persistence/domain/MktmailManagement.java

@@ -24,15 +24,7 @@ public class MktmailManagement extends TscBaseDomain{
 	private String useYn;					// 사용구분
 	private String regDt;					// 등록일시
 	private String updDt;					// 수정일시
-	
-	
-	
-	// 메일템플릿 코너 등록
-	
-	
-	// 메일템플릿 코너 상품
-	
-	
+
 	private String searchTxt;				// 검색어
 	
 }

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

@@ -0,0 +1,30 @@
+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 String goodsCd;					// 상품코드(상품)
+	private Integer dispOrd;				// 표시순서
+	private String regDt;					// 등록일시
+	private String updDt;					// 수정일시
+	
+	//상품정보
+	private String brandKnm;				// 브랜드명
+	private String  goodNms;				// 상품명
+	private String cdNm;					// 판매상태
+	private String listPrice;				// 정상가
+	private String currPrice;				// 판매가
+}

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

@@ -0,0 +1,27 @@
+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;					// 수정일시
+	
+}

+ 62 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaMailHF.xml → src/main/java/com/style24/persistence/mybatis/shop/TsaMailManagement.xml

@@ -84,4 +84,66 @@
 			WHERE MAILHF_SQ = #{mailhfSq}
 	</update>
 	
+	
+	<select id="getOrderSampleGoodsInfo" parameterType="Goods" resultType="Goods">
+	SELECT 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
+			 , 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
+				   , (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>
 </mapper>

+ 108 - 45
src/main/webapp/WEB-INF/views/marketing/MktmailmanagementDetailForm.html

@@ -25,7 +25,7 @@
 		
 		<!-- 팝업창 상단부분 시작-->
 		<div class="panelContent">
-			<form id="mailHFForm" name="mailHFForm" action="#" th:action="@{'/marketing/mailtemplate/save'}" th:method="post">
+			<form id="mailManagementForm" name="mailManagementForm" action="#" th:action="@{'/marketing/mailtemplate/save'}" th:method="post">
 				<input type="hidden" name="mode" th:value="${mode}"/>
 				
 				<table class="frmStyle" aria-describedby="">
@@ -101,7 +101,7 @@
 					</ul>
 						<!-- 구분 1 -->
 						<form id="searchForm1" name="searchForm1" action="#" th:action="@{'/'}">
-						<div class="inner-panelContent" id="btnAddGridNum" style="display:none;">
+						<div class="inner-panelContent" id="btnAddGridNum">
 							<div class="panelContent">
 								<table class="frmStyle">
 									<colgroup>
@@ -116,25 +116,25 @@
 											<div class="">
 												<table  class="frmStyle">
 													<tr>
-														<th class="w100">번호</th>
+														<th class="w100">구분자 명</th>
 														<td>
-															<input type="text" name="" placeholder="자동생성" readonly="readonly"/>								
+															<input type="text" name="mailtcNm" placeholder="자동생성" readonly="readonly"/>								
 														</td>
 													</tr>
 													<tr>
 														<th>링크</th>
 														<td>
-															<input type="text" name=""/>								
+															<input type="text" name="mailtcLink"/>								
 														</td>
 													</tr>
 													<tr>
 														<th>상품 노출 기준</th>
 														<td>
-															<label class="rdoBtn"><input type="radio" name=""/>1개</label>
-															<label class="rdoBtn"><input type="radio" name=""/>2개</label>
-															<label class="rdoBtn"><input type="radio" name="" checked/>3개</label>						
-															<label class="rdoBtn"><input type="radio" name=""/>4개</label>
-															<label class="rdoBtn"><input type="radio" name=""/>5개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr"/>1개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr"/>2개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr" checked/>3개</label>						
+															<label class="rdoBtn"><input type="radio" name="goodsCpr"/>4개</label>
+															<label class="rdoBtn"><input type="radio" name="goodsCpr"/>5개</label>
 														</td>
 													</tr>
 												</table>
@@ -143,7 +143,7 @@
 														<button type="button" class="btn btn-danger btn-lg" id="">상품삭제</button>
 													</li>
 													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" id="">상품추가</button>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnOpenGoodsPopup();" id="AddGoods_num">상품추가</button>
 													</li>													
 												</ul>
 												<!-- Agrid -->
@@ -154,7 +154,7 @@
 								</table>
 							</div>
 						</div>
-						</form> <!-- 구분1 -->
+						</form> 
 						<!-- 구분 1 -->
 						
 						<!-- 구분2 -->
@@ -176,7 +176,7 @@
 													<tr>
 														<th class="w100">번호</th>
 														<td>
-															<input type="text" name="" placeholder="자동생성" readonly="readonly"/>								
+															<input type="text" name="" placeholder="자동생성" readonly="readonly"/>
 														</td>
 													</tr>
 													<tr>
@@ -201,7 +201,7 @@
 														<button type="button" class="btn btn-danger btn-lg" id="" >상품삭제</button>
 													</li>
 													<li class="right">
-														<button type="button" class="btn btn-info btn-lg" id="">상품추가</button>
+														<button type="button" class="btn btn-info btn-lg" onclick="fnFetchGoods();" id="AddGoods_num2">상품추가</button>
 													</li>													
 												</ul>
 												<!-- Agrid -->
@@ -412,13 +412,24 @@
 <script type="text/javascript" src="/ux/plugins/gaga/gaga.summernote.js?v=20201030"></script>
 <script th:inline="javascript">
 /*<![CDATA[*/
-
+	
+	
+		//상품 전시 그리드 그리기
+		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: "brandKnm" , width: 200, cellClass: 'text-center'},
+			{headerName: "상품명", field: "goodNms" , width: 200, cellClass: 'text-center'},
+			{headerName: "판매상태", field: "cdNm" , width: 100, cellClass: 'text-center'	},
+			{headerName: "정상가", field: "listPrice" , width: 120, cellClass: 'text-center'},
+			{headerName: "판매가", field: "listPrice" , width: 120, cellClass: 'text-center'},
+			{headerName: "순번", field: "dispOrd" , width: 120, cellClass: 'text-center'},
+		]
+	
 		// 상품 구분 추가 버튼
 		// 추가 버튼 표시는 1~5까지 순서대로 표시
 		function btnAddGrid(){
-			if($('#btnAddGridNum').css('display') == 'none'){
-				$('#btnAddGridNum').show();('#searchForm1')
-			}else if($('#btnAddGridNum2').css('display') == 'none'){
+			if($('#btnAddGridNum2').css('display') == 'none'){
 				$('#btnAddGridNum2').show();('#searchForm2')
 			}else if($('#btnAddGridNum3').css('display') == 'none' && $('#btnAddGridNum2').css('display') != 'none'){
 				$('#btnAddGridNum3').show();('#searchForm3')
@@ -432,10 +443,79 @@
 				});
 				return false;
 			}
-		} //end of btnAddGrid
+		}
+
+		// 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);
+
+		
+		// 상품조회 팡업
+		var fnOpenGoodsPopup = function() {
+			cfnOpenGoodsPopup('fnFetchGoods');
+		}
 		
-		// 상품 구분 삭제 버튼
-		// 삭제는 해당 하는 폼이 삭제
+		//버튼
+		
+		if($('#AddGoods_num').on('click')){
+				var AddgridRow = gridOptions_c1;
+		}if($('#AddGoods_num2').on('click')){
+				var AddgridRow = gridOptions_c2;
+		}
+		
+		// 상품추가
+		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(!isExist){
+						var data = {
+							goodsCd : item.goodsCd
+							, brandKnm : item.brandKnm
+							, goodNms : item.goodsNm
+							, cdNm : item.goodsStat
+							, listPrice : item.listPrice
+							, currPrice : item.currPrice
+							, dispOrd : index
+	
+						};
+						
+						//그리드 마지막에 추가해야함
+						AddgridRow.api.updateRowData({add: [data], addIndex: idx});
+						AddgridRow.api.refreshCells();
+						index++;
+					}
+				});
+			});
+			
+		}
+
+
+		// 상품 구분 삭제 버튼  삭제는 해당 하는 폼이 삭제
 		function btnDeleteGridNum(){
 			if($('#btnAddGridNum').css('display') !='none'){
 				$('#btnAddGridNum').hide();
@@ -467,37 +547,20 @@
 			}			
 		}
 
-	
-		//상품 전시 그리드 그리기
-		var columnMktProductList = [
-		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		{headerName: "Product ID", field: "" , width: 120, cellClass: 'text-center'},
-		{headerName: "상품명", field: "" , width: 200, cellClass: 'text-center'},
-		{headerName: "판매상태", field: "" , width: 120, cellClass: 'text-center'},
-		{headerName: "정상가", field: "" , width: 120, cellClass: 'text-center'},
-		{headerName: "판매가", field: "" , width: 120, cellClass: 'text-center'},
-		{headerName: "순번", field: "" , width: 120, cellClass: 'text-center'},
-	];
-	
-		//리스토 값 전달
-		var gridOptionsMktProductList = gagaAgGrid.getGridOptions(columnMktProductList);
-		
-		
+
 		
 		$(document).ready(function() {
 		
-		gagaAgGrid.createGrid("gridSectionGbList1", gridOptionsMktProductList);
-		gagaAgGrid.createGrid("gridSectionGbList2", gridOptionsMktProductList);
-		gagaAgGrid.createGrid("gridSectionGbList3", gridOptionsMktProductList);
-		gagaAgGrid.createGrid("gridSectionGbList4", gridOptionsMktProductList);
-		gagaAgGrid.createGrid("gridSectionGbList5", gridOptionsMktProductList);
+		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);
 
-		
 		// Create a summernote
 		let snOptions = gagaSn.getToolbarOptions();
 		gagaSn.createSummernote(snOptions, '#mailContent');
-		
-		
+
 	});
 /*]]>*/
 </script>

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

@@ -91,7 +91,7 @@
 			headerName: "타이틀", field: "mailtNm", width: 350, cellClass: 'text-center'
 		},
 		{	//미리보기 
-			headerName: "", field: "", width: 150, cellClass: 'text-center',
+			headerName: "미리보기", field: "", width: 150, cellClass: 'text-center',
 			cellRenderer: function(params) { 
 				return '<a href="javascript:void(0);">' + params.value + '</a>'; 
 			}