Kaynağa Gözat

Merge branch 'sowon' into develop

sowon4187 5 yıl önce
ebeveyn
işleme
01ad5850d6

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

@@ -315,5 +315,31 @@ public interface TsaPlanDao {
 	 */
 	Collection<Plan> getPlanCustGradeList(Plan param);
 
+	/**
+	 * 기획전 템플릿 등록
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 25
+	 */
+	void createPlanContents(Plan param);
 
+	/**
+	 * 기획전 템플릿 리스트 카운트 조회
+	 * @param  param
+	 * @return int
+	 * @author sowon
+	 * @since 2021. 2. 25
+	 */
+	int getPlanContentsCount(Plan param);
+	
+	
+	/**
+	 * 기획전 템플릿 아이템 등록
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 2. 25
+	 */
+	void createPlanContentsItem(Plan param);
 }

+ 49 - 0
src/main/java/com/style24/admin/biz/service/TsaPlanService.java

@@ -845,5 +845,54 @@ public class TsaPlanService {
 	public Collection<Plan> getPlanCustGradeList(Plan param) {
 		return planDao.getPlanCustGradeList(param);	
 	}
+	
+	/**
+	 * 기획전 템플릿 등록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 25
+	 */
+	public void createPlanContents(Plan param) {
+		Integer regNo = TsaSession.getInfo().getUserNo();
+		// 리뷰 등록
+		Plan rePlan = new Plan();
+		String[] reviewData = param.getAllReviewData();
+		
+		//리뷰 등록 - tb_plan_contents
+		rePlan.setRegNo(regNo);
+		rePlan.setUpdNo(regNo);
+		rePlan.setTmplType("G082_20");
+		rePlan.setTitle(param.getReTitle());
+		rePlan.setDispYn(param.getReDispYn());
+		rePlan.setDispOrd(param.getReDispOrd());
+		
+		
+		
+	}
+	
+	/**
+	 * 기획전 템플릿 목록 카운트 조회
+	 * @param  param
+	 * @return int
+	 * @author sowon
+	 * @since 2021. 2. 25
+	 */
+	public int getPlanContentsCount(Plan param) {
+		return planDao.getPlanContentsCount(param);
+	}
+	
+	/**
+	 * 기획전 템플릿 아이템 등록
+	 *
+	 * @param
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 25
+	 */
+	void createPlanContentsItem(Plan param) {
+	}
+	
 
 }

+ 25 - 24
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -2061,35 +2061,36 @@ public class TsaMarketingController extends TsaBaseController {
 	 * @since 2021. 2. 18
 	 */
 	@GetMapping("/planning/detail/template/form")
-	public ModelAndView planTemplateForm(Plan param) {
+	public ModelAndView planTemplateForm(Plan param,@RequestParam(value = "planSq") String planSq)  {
 		ModelAndView mav = new ModelAndView();
-
-		// 신규
-		if(param.getMode().equals("C")) {
-			
+		
+		// 템플릿 등록이 최조인지 확인
+		if(planService.getPlanContentsCount(param) > 0) {
+			mav.addObject("mode","U");
+		}else {
+			mav.addObject("mode","C");
 		}
-//		// 코너유형목록
-//		mav.addObject("cornerDispTypeCopyList", rendererService.getCommonCodeList("G045", "Y"));
-//
-//		// 코너유형
-//		mav.addObject("planDtlStatCopyList", rendererService.getCommonCodeList("G044", "Y"));
-//
-//		// 코너 조회
-//		mav.addObject("planList", planService.getPlanAllList(param));
-//
-//		if (param.getCopyMode().equals("CORNER")) { // 코너 복사
-//			// 기획전 일련번호
-//			mav.addObject("planSq", param.getPlanSq());
-//		}
-//
-//		// 모드
-//		mav.addObject("copyMode", param.getCopyMode());
-
-		mav.setViewName("marketing/PlanTemplatePopupForm");
 		
-
+		mav.addObject("planSq",planSq);
+		mav.setViewName("marketing/PlanTemplatePopupForm");
 		return mav;
 	}
+	
+	/**
+	 * 기획전 템플릿 저장
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 18
+	 */
+	@PostMapping("/planning/detail/template/save")
+	@ResponseBody
+	public GagaResponse planTemplateSave(@RequestBody Plan param) {
+		// 기획전 컨텐츠 등록
+		planService.createPlanContents(param);
+		
+		return super.ok(message.getMessage("SUCC_0001"));
+	}
 
 	/**
 	 *   기획전 작업 종료 - sowon

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

@@ -71,6 +71,8 @@ public class Plan extends TscBaseDomain{
 		// 기획전 소스
 		private Integer seq;					//일련번호
 		private String fsrc;				//프론트소스
+		private String fsrcTop;				//프론트 상단소스
+		private String fsrcBtm;				//프론트 하단소스
 		private String fsrcPc;				//프론트소스(pc)	/ 화면용
 		private String fsrcMobile;			//프론트소스(모바일)	/ 화면용
 
@@ -153,6 +155,27 @@ public class Plan extends TscBaseDomain{
 		private String popupDispStdt;		//기획전 시작일시
 		private String popupDispEddt;		//기획전 종료일시
 		
+		//기획전 템플릿
+		private Integer planContSq;			// 기획전 컨텐츠 일련번호
+		private String tmplType;			//템플릿 유형(공통코드 G082)
+		private String title;				//타이틀
+		private String linkUrl;				//링크url
+		private String dispYn;				//표시여부
+		private Integer planContItemSq;		//기획전 컨텐프 아이템 일련번호
+		private String itemVal;				//아이템값(상품코드, 이미지파일명 등)
+		private String reviewDispStdt;		//리뷰노출시작일시
+		private String reviewDispEddt;		//리뷰노툴종료일시
+		
+		private String[] allReviewData;		//리뷰상품목록
+		private String reTitle;				//리뷰타이틀
+		private String mode;				//모드
+		private long reDispOrd;				//리뷰전시순서
+		private String reItemVal;			//리뷰아이템
+		private String reDispYn;			//리뷰전시여부
+		
+				
+		
+		
 		// Pagination
 		private TscPageRequest pageable;
 		private int pageNo = 1;

+ 85 - 6
src/main/java/com/style24/persistence/mybatis/shop/TsaPlan.xml

@@ -259,12 +259,13 @@
 	<select id="getPlanFsrcList" parameterType="Plan" resultType="Plan">
 		/* TsaMarketing.getPlanFsrcList */
 		SELECT PLAN_SQ
-	          , FRONT_GB
-	          , FSRC
-	          , REG_NO
-	          , REG_DT
-	          , UPD_NO
-	          , UPD_DT
+		     , FRONT_GB
+		     , FSRC_TOP
+		     , FSRC_BTM
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
 		FROM   TB_PLAN_FSRC
 		WHERE  PLAN_SQ = #{planSq}
 		AND    FRONT_GB = #{frontGb}
@@ -919,6 +920,84 @@
 		WHERE PLAN_SQ = #{planSq}
 	</select>
 	
+	<insert id="createPlanContents" parameterType="Plan">
+		/* TsaMarketing.createPlanContents */
+		INSERT INTO 
+			TB_PLAN_CONTENTS(
+							  PLAN_SQ
+							, TMPL_TYPE
+							, TITLE
+							, LINK_URL
+							, DISP_YN
+							, DISP_ORD
+							, REG_NO
+							, REG_DT
+							, UPD_NO
+							, UPD_DT
+						)
+			  VALUES(
+						#{planSq}
+					 , #{tmplType}
+					 , #[title}
+					 , #{linkUrl}
+					 , #{dispYn}
+					 , #{dispOrd}
+					 , #{regNo}
+					 , now()
+					 , #{updNo}
+					 , now()
+				   )
+			  ON
+			     DUPLICATE KEY 
+			 UPDATE 
+			 	   TITLE=#{title}
+			   	 , LINK_URL=#{linkUrl}
+			     , DISP_YN=#{dispYn}
+			     , DISP_ORD=#{dispOrd}
+			     , UPD_NO=#{updNo}
+			     , UPD_DT=now()
+	</insert>
+	
+	
+	<select id="getPlanContentsCount" parameterType="Plan" resultType="int">
+		/* TsaMarketing.getPlanContentsCount */
+		SELECT COUNT(*) AS CNT
+		FROM TB_PLAN_CONTENTS
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
+	
+	<insert id="createPlanContentsItem" parameterType="Plan">
+		INSERT INTO 
+			TB_PLAN_CONTENTS_ITEM(
+						PLAN_CONT_SQ
+					  , ITEM_VAL
+					  , DISP_ORD
+					  , REVIEW_DISP_STDT
+					  , REVIEW_DISP_EDDT
+					  , REG_NO
+					  , REG_DT
+					)
+			VALUES(
+					#{planContSq}
+				  , #{itemVal}
+				  , #{dispOrd}
+				  , #{reviewDispStdt}
+				  , #{reviewDispEddt}
+				  , #{regNo}
+				  , now()
+				 )
+			 ON
+			     DUPLICATE KEY 
+			 UPDATE 
+			 	 ITEM_VAL= #{itemVal}
+			   , DISP_ORD= #{dispOrd}
+			   , REVIEW_DISP_STDT= #{reviewDispStdt}
+			   , REVIEW_DISP_EDDT= #{reviewDispEddt}
+			   , REG_NO= #{regNo}
+			   , REG_DT= now()
+	</insert>
+	
 	
 	
 </mapper>

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

@@ -677,7 +677,7 @@
 	
 	//템플릿 유형 설정
 	var fnPlanTemplatePopup = function () {
-		var actionUrl = "/marketing/planning/detail/template/form?mode=C";
+		var actionUrl = "/marketing/planning/detail/template/form?mode=C&planSq=" + planInfo.planSq;
 		cfnOpenModalPopup(actionUrl,'popupPlanTemplate');
 	}
 	

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

@@ -24,7 +24,9 @@
 			</button>
 		</div>
 		
-	<form id="planTemplateForm" name="planTemplateForm" action="#" th:action="@{'/marketing/planning/corner/list'}" th:method="post">
+	<form id="planTemplateForm" name="planTemplateForm" action="#" th:method="post">
+			<input type="hidden" name="planSq" th:value="*{planSq}"/>
+			<input type="hidden" name="mode" th:value="*{mode}"/>
 			<div class="cardArea" style="height: 700px; margin: 3px;">
 
 				<div class="panelContent">
@@ -45,24 +47,23 @@
 										<col width="90%" />
 									</colgroup>
 									<tr>
-										<th>리뷰<br/>[사용여부<label class="chkBox"><input type="checkbox" name="" value="Y"/></label>]</th>
+										<th>리뷰<br/>[전시여부<label class="chkBox"><input type="checkbox" name="reDispYn" onclick="fnAttachYnClick('reDispYn')"/></label>]</th>
 										<td>
 											<table class="frmStyle">
 												<tr>
 													<th>리뷰 타이틀</th>
-													<td><input type="text" value="" class="w300 aR">
+													<td><input type="text" name="reTitle" class="w300 aR">
 													</td>
 												</tr>
 												<tr>
 													<th>전시순서</th>
-													<td><input type="text" value="" placeholder="1"
-														class="w100 aR"></td>
+													<td><input type="text" name="reDispOrd" placeholder="1" class="w100 aR" data-valid-type="numeric"></td>
 												</tr>
 											</table>
 											<div class="padding10">
 												<span class="buttonSpan">
 													<button type="button"
-														class="btn btnRight btn-success btn-lg" id="">상품조회</button>
+														class="btn btnRight btn-success btn-lg" onclick="cfnOpenGoodsPopup('reviewGoodsList')">상품 조회</button>
 													<button type="button"
 														class="btn btnRight btn-success btn-lg" id="">행삭제</button>
 												</span> <br />
@@ -95,7 +96,7 @@
 										<col width="90%" />
 									</colgroup>
 									<tr>
-										<th>쿠폰<br/>[사용여부<label class="chkBox"><input type="checkbox" name="" value="Y"/></label>]</th>
+										<th>쿠폰<br/>[사용여부<label class="chkBox"><input type="checkbox" name="" id="tempYn" value="Y"/></label>]</th>
 										<td>
 											<table class="frmStyle">
 												<tr>
@@ -105,8 +106,7 @@
 												</tr>
 												<tr>
 													<th>전시순서</th>
-													<td><input type="text" value="" placeholder="1"
-														class="w100 aR"></td>
+													<td><input type="text" value="" placeholder="2"	class="w100 aR"></td>
 												</tr>
 											</table>
 											<div class="padding10">
@@ -970,8 +970,8 @@
 	// 리뷰 리스트 설정
 	var columnReviewList = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
-		{headerName: "상품ID", field: "", width: 110, cellClass: 'text-center'},
-		{headerName: "상품명", field: "", width: 120, cellClass: 'text-center'},
+		{headerName: "상품ID", field: "reItemVal", width: 110, cellClass: 'text-center'},
+		{headerName: "상품명", field: "reItemName", width: 120, cellClass: 'text-center'},
 		{headerName: "시작일"			, field:'startSearchDate'	, width:110, cellClass: 'text-center',
 			cellEditor: 'datePicker',
 			cellEditorParams: { maxlength: 10, required: true },
@@ -996,18 +996,7 @@
 		{headerName: "쿠폰ID", field: "", width: 110, cellClass: 'text-center'},
 		{headerName: "쿠폰명", field: "", width: 120, cellClass: 'text-center'},
 	];
-	
-	//팝업창 삭제버튼
-	$('#btndeleteTemplate').on('click', function() {
-		mcxDialog.confirm("창을 닫으시겠습니까?<br>닫은 내용은 복원하실 수 없습니다.", {
-			cancelBtnText: "취소",
-			sureBtnText: "확인",
-			sureBtnClick: function() {
-				uifnPopupClose('popupPlanTemplate');
-			}
-		});
-	});
-	
+
 	//상품 전시 그리드 그리기
 	var columnDefs = [
 		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
@@ -1059,15 +1048,36 @@
 	
 	// 리뷰 그리드 설정
 	var gridOptionsPlanReviewList = gagaAgGrid.getGridOptions(columnReviewList);
-	gridOptionsPlanReviewList.rowSelection = "single";
+	gridOptionsPlanReviewList.stopEditingWhenGridLosesFocus = true;
+	gridOptionsPlanReviewList.defaultColDef.editable = true;
+	gridOptionsPlanReviewList.rowSelection = "multiple";
 	gridOptionsPlanReviewList.suppressRowClickSelection = true;
 	
-	// 리뷰 그리드 설정
+	// 쿠폰 그리드 설정
 	var gridOptionsPlanCouponeList = gagaAgGrid.getGridOptions(columnCouponList);
-	gridOptionsPlanCouponeList.rowSelection = "single";
+	gridOptionsPlanCouponeList.rowSelection = "multiple";
 	gridOptionsPlanCouponeList.suppressRowClickSelection = true;
 	
 	
+	//팝업창 닫기버튼
+	$('#btndeleteTemplate').on('click', function() {
+		mcxDialog.confirm("창을 닫으시겠습니까?<br>닫은 내용은 복원하실 수 없습니다.", {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				uifnPopupClose('popupPlanTemplate');
+			}
+		});
+	});
+	
+	
+	
+	var fnDetailFormSearch = function() {
+		uifnPopupClose('planTemplateForm');		
+	}
+	
+	
+	
 	// 첨부파일 삭제
 	var fnDeleteFile = function(obj, noticeSq, seq, sysFileNm) {
 		mcxDialog.confirm('정말 삭제하시겠습니까?', {
@@ -1152,7 +1162,7 @@
 			break;
 		}
 		
-		cfnOpenGoodsPopup('fnFetchGoods');
+		//cfnOpenGoodsPopup('fnFetchGoods');
 	}
 	
 	// 상품 삭제
@@ -1260,8 +1270,7 @@
 			$('#btnAddGridNum10').hide();
 			$('#searchForm10')[0].reset();
 		}
-	} 
-	
+	} 	
 	
 	
 	// 첨부파일 개수 선택시
@@ -1304,6 +1313,77 @@
 		);
 	}
 	
+	// 리뷰상품 추가 콜백 함수
+	var reviewGoodsList = function (result) {
+		// 기존 리스트 데이터 for
+		for(let i = 0 ; i < result.length ; i++) {
+			let addChk = true, gridListValue = gagaAgGrid.getAllRowData(gridOptionsPlanReviewList);		// 받아온 모든 데이터
+			// 받아온 data for
+			for(let j = 0 ; j < gridListValue.length ; j++) {
+				// 동일한 data는 추가하지 않음
+				if(gridListValue[j].reItemVal == result[i].goodsCd) {	addChk = false;	}		// 중복체크
+			}
+			// 중복되지 않은 데이터 리스트에 추가
+			if(addChk) {
+				gagaAgGrid.addRowData(gridOptionsPlanReviewList, {"reItemVal":result[i].goodsCd , "reItemName":result[i].goodsNm, "startSearchDate": _today, "startSearchTime": '00:00:00', "endSearchDate":_today, endSearchTime: '23:59:59' });
+			}
+		}
+		
+		uifnPopupClose("popupGoods");
+	}
+	
+	
+	// 팝업창 저장
+	$('#btnSaveTemplate').on('click', function() {
+		if($("input:checkbox[name=reDispYn]").prop("checked")){
+			$("input:checkbox[name=reDispYn]").val('Y');
+			if($("input[name=reTitle]").val()==''){
+				mcxDialog.alert('리뷰 타이틀을 입력하세요.');
+				return;
+			}
+			if($("input[name=reDispOrd]").val()==''){
+				mcxDialog.alert('리뷰 전시순서를 입력하세요.');
+				return;
+			}
+			
+		}else{
+			$("input:checkbox[name=reDispYn]").val('N');
+		}
+		
+		mcxDialog.confirm('기획전 템플릿을 등록 하시겠습니까?', {
+			cancelBtnText: "취소",
+			sureBtnText: "확인",
+			sureBtnClick: function() {
+				
+				let allReviewData = gagaAgGrid.getAllRowData(gridOptionsPlanReviewList);
+				var multiPlanReview = [];
+				$.each(allReviewData, function(idx, item) {
+					multiPlanReview.push(item.reItemVal);
+				});
+				
+				let data = {
+							allReviewData : allReviewData
+						   ,reTitle : $('#planTemplateForm input[name=reTitle]').val()
+						   ,reDispOrd : $('#planTemplateForm input[name=reDispOrd]').val()
+						   ,reDispYn :  $('#planTemplateForm input:checkbox[name=reDispYn]').val()
+						   ,mode :  $('#planTemplateForm input[name=mode]').val()
+				}
+				var jsonData = JSON.stringify(data);
+				gagajf.ajaxJsonSubmit('/marketing/planning/detail/template/save', jsonData, fnDetailFormSearch);
+			}
+		});
+		
+		//if($("input:checkbox[name=cpnYn]").is(":checked") == true){
+			// if 쿠폰 타이틀을 입력해주세요.
+			// return;
+			// if 전시순서를 입력해주세요.
+			// return;
+		//}
+		
+		
+	});
+
+	
 $(document).ready(function() {