Browse Source

기획전 복사

sowon4187 5 years ago
parent
commit
bc2d1b40e7

+ 165 - 0
src/main/java/com/style24/persistence/mybatis/shop/TssPlan.xml

@@ -803,6 +803,171 @@
 		         	 , UPD_DT = now()
 	</insert>
 	
+		<!-- 기획전 복사 -->
+	<insert id="createPlanCopy" parameterType="Plan">
+		/* TssPlan.createPlanCopy */
+		<selectKey keyProperty="planSq" resultType="Integer" order="AFTER">
+			SELECT LAST_INSERT_ID()	/* 기획전 일련번호  */
+		</selectKey>
+		INSERT INTO TB_PLAN (
+		            PLAN_SQ
+		          , PLAN_NM
+		          , PLAN_GB
+		          , SITE_CD
+		          , FRONT_GB
+		          , DISP_STDT
+		          , DISP_EDDT
+		          , MAIN_PIMG
+		          , MAIN_MIMG
+		          , DTL_PIMG
+		          , DTL_MIMG
+		          , DTL_TITLE1        
+		          , REPLY_YN
+		          , REPLY_LOC
+		          , REPLY_IMG
+		          , REPLY_TITLE1
+		          , REPLY_TITLE2
+		          , POLL_SQ
+		          , NEW_CUST_YN
+		          , CUST_JOIN_STDT
+		          , CUST_JOIN_EDDT   
+		          , DEV_URL
+		          , CORNER_NM_DISP_YN
+		          , GOODS_LIMIT_YN
+		          , GOODS_LIMIT_QTY
+		          , DEL_YN
+		          , OPEN_YN
+		          , DISP_ORD
+		          , READ_CNT
+		          , BADGE_NM
+		          , BADGE_FCOLOR
+		          , BADGE_BCOLOR
+		          , REG_NO
+		          , REG_DT
+		          , UPD_NO
+		          , UPD_DT
+		      ) SELECT #{planSq}
+		             , PLAN_NM
+		             , PLAN_GB
+		             , SITE_CD
+		             , FRONT_GB
+		             , DISP_STDT
+		             , DISP_EDDT
+		             , MAIN_PIMG
+		             , MAIN_MIMG
+		             , DTL_PIMG
+		             , DTL_MIMG
+		             , DTL_TITLE1
+		             , 'N'
+		             , REPLY_LOC
+		             , REPLY_IMG
+		             , REPLY_TITLE1
+		             , REPLY_TITLE2
+		             , POLL_SQ
+		             , 'N'
+		             , CUST_JOIN_STDT
+		             , CUST_JOIN_EDDT  
+		             , DEV_URL
+		             , CORNER_NM_DISP_YN
+		             , GOODS_LIMIT_YN
+		             , GOODS_LIMIT_QTY
+		             , 'N'
+		             , OPEN_YN
+		             , DISP_ORD
+		             , 0
+		             , BADGE_NM
+		             , BADGE_FCOLOR
+		             , BADGE_BCOLOR
+		             , #{regNo}
+		             , now()
+		             , #{updNo}
+		             , now()
+		        FROM   TB_PLAN
+		        WHERE  PLAN_SQ = #{copyPlanSq}
+	</insert>
+	
+	<insert id="createPlanBrandCopy" parameterType="Plan">
+		/* TssPlan.createPlanBrandCopy */
+			INSERT INTO
+					 TB_PLAN_BRAND 
+					 (
+			           BRAND_GROUP_NO
+					  ,PLAN_SQ 
+					  ,DISP_YN 
+					  ,REG_NO  
+					  ,REG_DT  
+					  ,UPD_NO  
+					  ,UPD_DT  
+     			      ) SELECT 	
+     			      		BRAND_GROUP_NO
+						  , #{planSq} 
+						  , DISP_YN 
+						  , #{regNo} 
+						  , CURRENT_TIMESTAMP  
+						  , #{updNo} 
+						  , CURRENT_TIMESTAMP  
+	        	   FROM   TB_PLAN_BRAND
+	        	   WHERE 1=1
+					 AND PLAN_SQ = #{copyPlanSq}
+	        	     AND BRAND_GROUP_NO = #{brandGroupNo}
+	</insert>
+	
+	<select id="getPlanCustGbList" parameterType="Plan" resultType="Plan">
+		/* TssPlan.createPlanCustGrade */
+		SELECT CUST_GB 
+			  ,PLAN_SQ 
+			  ,REG_DT 
+			  ,REG_NO 
+		FROM TB_PLAN_CUST_DIVISION
+		WHERE PLAN_SQ = #{planSq}
+	</select>
+	
+	<insert id="createPlanCateCopy" parameterType="Plan">
+		/* Tsslan.createPlanCateCopy */
+			INSERT INTO
+					 TB_PLAN_CATE
+					 (
+			           CATE_NO
+					  ,PLAN_SQ
+					  ,DISP_YN
+					  ,REG_NO 
+					  ,REG_DT 
+					  ,UPD_NO 
+					  ,UPD_DT 
+     			      ) SELECT 	
+     			      		CATE_NO
+						  , #{planSq} 
+						  , DISP_YN 
+						  , #{regNo}
+						  , now()  
+						  , #{updNo}
+						  , now()  
+	        	   FROM   TB_PLAN_CATE
+	        	   WHERE 1=1
+					 AND PLAN_SQ = #{copyPlanSq}
+	        	     AND CATE_NO = #{cateNo}
+	</insert>
+	
+	<insert id="createPlanCustGbCopy" parameterType="Plan">
+		/* TssPlan.createPlanCustGbCopy */
+			INSERT INTO
+					 TB_PLAN_CUST_DIVISION
+					 (
+			         	 PLAN_SQ
+			           , CUST_GB
+			           , REG_NO
+			           , REG_DT
+     			      ) SELECT 	
+     			      		 #{planSq}
+     			      		, CUST_GB
+     			      		, #{regNo}
+     			      		, now()
+	        	   FROM  TB_PLAN_CUST_DIVISION
+	        	   WHERE 1=1
+					 AND PLAN_SQ = #{copyPlanSq}
+					 AND CUST_GB = #{custGb}
+	</insert>
+	
 	<!-- 기획전 템플릿 이미지 파일 삭제 -->
 	<delete id="deletePlanTemplateFile" parameterType="Plan">
 		/* TssPlan.deletePlanTemplateFile */

+ 45 - 0
src/main/java/com/style24/scm/biz/dao/TssPlanDao.java

@@ -318,5 +318,50 @@ public interface TssPlanDao {
 	 * @since 2021. 05. 06
 	 */
 	void deletePlanTemplateFile(Plan plan);
+	
+	/**
+	 * 기획전 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	void createPlanCopy(Plan param);
+	
+	/**
+	 * 기획전 브랜드 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	void createPlanBrandCopy(Plan param);
+	
+	/**
+	 * 기획전 카테고리 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	void createPlanCateCopy(Plan param);
+	
+	/**
+	 * 기획전 회원구분 조회
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	Collection<Plan> getPlanCustGbList(Plan param);
 
+	/**
+	 * 기획전 고객유형 복사
+	 *
+	 * @param
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	void createPlanCustGbCopy(Plan param);
+	
 }

+ 69 - 0
src/main/java/com/style24/scm/biz/service/TssPlanService.java

@@ -1247,6 +1247,75 @@ public class TssPlanService {
 		}
 	}
 	
+	/**
+	 * 기획전 복사
+	 *
+	 * @param 복사대상 기획전 번호
+	 * @return 복사된 기획전 번호
+	 * @author sowon
+	 * @since 2021. 02. 09
+	 */
+	@Transactional("shopTxnManager")
+	public Plan copyPlan(Plan param) {
+		Plan plan = new Plan();
+		int userNo = TssSession.getInfo().getUserNo();
+		// 01. 기획전 복사
+		param.setRegNo(userNo);
+		param.setUpdNo(userNo);
+		planDao.createPlanCopy(param);
+		
+		plan.setRegNo(userNo);
+		plan.setUpdNo(userNo);
+		
+		// 02. 기획전 브랜드 복사
+		plan.setPlanSq(param.getCopyPlanSq());
+		Collection <Plan> brandList = planDao.getPlanBrandList(plan);
+		
+		for(Plan brandCd : brandList){
+			plan.setPlanSq(param.getPlanSq());
+			plan.setBrandGroupNo(brandCd.getBrandGroupNo());
+			plan.setCopyPlanSq(param.getCopyPlanSq()); 
+			planDao.createPlanBrandCopy(plan);
+		}
+		
+		// 02. 기획전 카테고리 복사
+		plan.setPlanSq(param.getCopyPlanSq());
+		Collection <Plan> cateList = planDao.getPlanCateList(plan);
+		
+		for(Plan cateNo : cateList){
+			plan.setPlanSq(param.getPlanSq());
+			plan.setCateNo(cateNo.getCateNo());
+			plan.setCopyPlanSq(param.getCopyPlanSq()); 
+			planDao.createPlanCateCopy(plan);
+		}
+		
+		// 04.고객 유형복사
+		plan.setPlanSq(param.getCopyPlanSq());
+		Collection <Plan> custGbList = planDao.getPlanCustGbList(plan);
+		
+		for(Plan custGb : custGbList){
+			plan.setPlanSq(param.getPlanSq());
+			plan.setCustGb(custGb.getCustGb());
+			plan.setCopyPlanSq(param.getCopyPlanSq()); 
+			planDao.createPlanCustGbCopy(plan);
+		}
+		
+		// 05.고객 등급 복사
+//		plan.setPlanSq(param.getCopyPlanSq());
+//		Collection <Plan> custGradeList = planDao.getPlanCustGradeList(plan);
+//		
+//		for(Plan custGrade : custGradeList){
+//			plan.setPlanSq(param.getPlanSq());
+//			plan.setCustGrade(custGrade.getCustGrade());
+//			plan.setCopyPlanSq(param.getCopyPlanSq()); 
+//			planDao.createPlanCustGradeCopy(plan);
+//		}
+
+
+		return plan;
+	}
+	
+	
 	/**
 	 * 기획전 템플릿 이미지 첨부파일 삭제
 	 * @param 

+ 69 - 0
src/main/java/com/style24/scm/biz/web/TssMarketingController.java

@@ -484,6 +484,75 @@ public class TssMarketingController extends TssBaseController {
 
 		return super.ok(message.getMessage("SUCC_0003"));
 	}
+	
+	/**
+	 * 기획전 조회 팝업
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	@GetMapping("/planning/list/popup")
+	public ModelAndView planPopup(Plan plan) {
+		ModelAndView mav = new ModelAndView();
+
+		// 사이트 목록
+		String supplyCompCd = TssSession.getInfo().getSupplyCompCd();
+		String selfYn = "N";
+		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList(supplyCompCd, selfYn));
+		// 웹/모바일 구분
+		mav.addObject("wmGbList", rendererService.getCommonCodeList("G093", "Y"));
+
+		// 사이트 목록
+		mav.addObject("siteList", rendererService.getCommonCodeList("G000", "Y"));
+
+		// 사용여부
+		mav.addObject("useYnList", rendererService.getAvailCommonCodeList("G002"));
+
+		// 파라메터
+		mav.addObject("params", plan);
+
+		mav.setViewName("marketing/PlanPopupForm");
+
+		return mav;
+	}
+	
+	/**
+	 * 기획전관리 목록
+	 *
+	 * @param
+	 * @return 기획전 팝업 목록
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	@PostMapping("/planning/list/detail/popup")
+	@ResponseBody
+	public Collection<Plan> getPlanListPop(@RequestBody Plan param) {
+		// 입점업체담당자는 업체코드 설정
+		if ("G001_B000".equals(TssSession.getInfo().getRoleCd())) {
+			param.setRegNo(TssSession.getInfo().getUserNo());
+		}
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(param.getCondition())) {
+			param.setConditionList(param.getCondition().replaceAll("\r", "").split("\n"));
+		}
+		
+		Collection<Plan> planList = planService.getPlanList(param);
+		return planList;
+	}
+	
+	/**
+	 * 기획전 등록 화면 기획전 복사
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 05. 06
+	 */
+	@PostMapping("/planning/copy")
+	@ResponseBody
+	public Plan copyPlan(@RequestBody Plan param) {
+		return planService.copyPlan(param);
+	}
 
 
     /**

+ 263 - 0
src/main/webapp/WEB-INF/views/marketing/PlanPopupForm.html

@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html lang="ko" xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PlanListPopupForm.html
+ * @desc    : 기획전 조회 팝업 화면 Page
+ *============================================================================
+ * SISUN
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.15   sowon     최초 작성
+ *******************************************************************************
+ -->
+
+<div class="modalPopup" data-width="1200" id="popupPlan">
+
+	<div class="panelStyle" style="height: 750px;">
+		<div class="panelTitle">
+			<strong>기획전 조회</strong>
+			<button type="button" class="close"
+				onclick="uifnPopupClose('popupPlan')">
+				<i class="fa fa-times"></i>
+			</button>
+		</div>
+
+		<div class="panelContent">
+			<form id="popupPlanSearchForm" name="popupPlanSearchForm" action="#"
+				th:action="@{'/marketing/planning/list/detail/popup'}"
+				onsubmit="$('#btnPlanPopupSearch').trigger('click'); return false;">
+				<table class="frmStyle">
+					<colgroup>
+						<col style="width: 5%;" />
+						<col style="width: 20%;" />
+						<col style="width: 5%;" />
+						<col style="width: 20%;" />
+						<col style="width: 5%;" />
+						<col style="width: 10%;" />
+						<col style="width: 5%;" />
+						<col style="width: 10%;" />
+						<col />
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>입점업체</th>
+							<td>
+								<select name="selSupplyCompCd" id="selSupplyCompCd" disabled="disabled" class="w70p">
+								<option value="">[선택]</option>
+								<option th:if="${supplyCompList}" th:each="oneData, status : ${supplyCompList}" th:value="${oneData.cd}" th:text="${'[' + oneData.cd + '] ' + oneData.cdNm}" th:selected="${sessionInfo.supplyCompCd ==  oneData.cd}"></option>
+								</select>
+							</td>
+
+							<th>기획전명</th>
+							<td><input type="text" name="planNm" id="planNm" /></td>
+
+							<th>기획전번호</th>
+							<td colspan="3"><input type="text" name="planSq" id="planSq" />
+							</td>
+
+						</tr>
+						<tr>
+							<th>웹/모바일구분</th>
+							<td><select name="frontGb">
+									<option value="">ALL</option>
+									<option value="P">웹</option>
+									<option value="M">모바일</option>
+									<option value="A">앱</option>
+							</select></td>
+
+							<th>기획전구분</th>
+							<td><select name="planGb">
+									<option value="">전체</option>
+									<option value="P">기획전</option>
+							</select></td>
+							
+							<th>오픈여부</th>
+							<td><select name="openYn">
+									<option value="">전체</option>
+									<option th:if="${useYnList}"
+										th:each="oneData, status : ${useYnList}"
+										th:value="${oneData.cd}"
+										th:text="|[${oneData.cd}] ${oneData.cdNm}|"></option>
+							</select></td>
+						</tr>
+
+						<tr>
+							<th>진행기간</th>
+							<td colspan="5" id="popupPlanTerms"></td>
+						</tr>
+					</tbody>
+				</table>
+				<ul class="panelBar">
+					<li class="center">
+						<input type="button" value="초기화" class="btn btn-gray btn-lg" id="btnInitPop"/>
+						<input type="button" value="조회" class="btn btn-base btn-lg"	 id="btnPlanPopupSearch" />
+					</li>
+				</ul>
+			</form>
+		</div>
+		<!-- 리스트 영역 -->
+		<div class="panelContent">
+			<div id="gridListPop" style="width: 100%; height: 400px;" class="ag-theme-balham"></div>
+		</div>
+		<!-- //리스트 영역 -->
+
+		<!-- 버튼 배치 영역 -->
+		<ul class="panelBar">
+			<li class="right">
+				<button type="button" class="btn btn-info btn-lg"
+					id="btnPlanPopupApply">적용</button>
+			</li>
+		</ul>
+
+	</div>
+</div>
+<script th:inline="javascript">
+/*<![CDATA[*/
+
+	var siteCdList = gagajf.convertToArray([[${siteList}]]);
+	var wmGbList = {"A":"ALL", "P":"웹", "M":"모바일"};
+	var templateTypeList = {"H":"HTML", "T":"TEXT"};
+	var planGbList = {"P":"기획전", "E":"이벤트"};
+	var planList = ([[${planList}]]);
+	
+	// 초기화 클릭시
+	$('#btnInitPop').on('click', function() {
+		fnInit();
+	});
+	
+	var fnInit = function(){
+		$('#popupPlanSearchForm')[0].reset();
+	}
+
+	var columnDefs =  [
+		{width: 40, minWidth: 40, cellClass: 'text-center', headerCheckboxSelection: true, checkboxSelection: true, filter: false},
+		{headerName: "미리보기"		, field:'plan'		, width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);" onclick="fnPreview(\'' + params.data.planSq + '\');">' + '미리보기' + '</a>'; }
+		},
+		{headerName: "기획전구분"		, field:'planGb'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(planGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(planGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(planGbList, params.newValue); }
+		},
+		{headerName: "사이트"			, field:'siteCd'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(siteCdList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(siteCdList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(siteCdList, params.newValue); }
+		},
+		{headerName: "프론트구분"	, field:'frontGb'	, width:120, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(wmGbList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(wmGbList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(wmGbList, params.newValue); }
+		},
+		{headerName: "오픈여부"		, field:'openYn'	, width:80 , cellClass: 'text-center'},
+		{headerName: "기획전번호"		, field:'planSq'	, width:100, cellClass: 'text-center',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "기획전명"		, field:'planNm'	, width:300, cellClass: 'text-left',
+			cellRenderer: function(params) { return '<a href="javascript:void(0);">' + params.value + '</a>'; }
+		},
+		{headerName: "서브제목"		, field:'dtlTitle1'	, width:300 , cellClass: 'text-center'},
+		{headerName: "기획전템플릿유형"	, field:'templateType'	, width:100, cellClass: 'text-center',
+			cellEditor: 'agRichSelectCellEditor',
+			cellEditorParams: { values: gagaAgGrid.extractValues(templateTypeList) },
+			valueFormatter: function (params) { return gagaAgGrid.lookupValue(templateTypeList, params.value); },
+			valueParser: function (params) { return gagaAgGrid.lookupKey(templateTypeList, params.newValue); }
+		},
+		{headerName: "전시순서"		, field:'dispOrd'	, width:100, cellClass: 'text-right' },
+		{headerName: "진행시작일시"		, field:'dispStdt'	, width:150, cellClass: 'text-center'},
+		{headerName: "진행종료일시"		, field:'dispEddt'	, width:150, cellClass: 'text-center'},
+		{headerName: "등록자"			, field:'regNm'		, width:100, cellClass: 'text-center'},
+		{headerName: "등록일"			, field:'regDt'		, width:150, cellClass: 'text-center'}
+	];
+
+	var gridOptionsPopupPlan = gagaAgGrid.getGridOptions(columnDefs);
+	gridOptionsPopupPlan.rowSelection = 'single';
+	
+	// 셀 클릭 이벤트
+	gridOptionsPopupPlan.onCellClicked = function(event) {
+		var field = event.colDef.field;
+		if (field != 'planSq' && field != 'planNm')
+			return;
+		
+	}
+	
+	// 미리보기
+	var fnPreview = function(planSq) {
+		var _wmall = [[${@environment.getProperty('domain.pastel')}]];
+		window.open(_wmall + '/planning/detail/form?planSq=' + planSq + '&adminPreview=Y', '_blank');
+ 		//document.location.href = _PAGE_CUSTOMER_INFO;
+	}
+	
+	// 조회 버튼 클릭 시
+	$('#btnPlanPopupSearch').on('click', function() {
+		var formId = '#popupPlanSearchForm';
+		gagaAgGrid.fetch($(formId).prop('action'), gridOptionsPopupPlan, formId);
+	});
+		
+	// 적용 버튼 클릭 시
+	$('#btnPlanPopupApply').on('click', function() {
+		
+		var selectedData = gagaAgGrid.selectedRowData(gridOptionsPopupPlan);
+		
+		if (selectedData.length < 1) {
+			mcxDialog.alert('선택 된 기획전이 없습니다.');
+			return
+		}
+		
+		var callback = [[${params.callBackFun}]];
+		
+		var jsonData = JSON.stringify(selectedData);
+
+		if ( typeof callback != 'undefined' && callback) {
+
+			if (typeof callback == 'function') {
+				callback(jsonData);
+			} else {
+				if (callback) {
+					if ( callback.indexOf("(") == -1 ) eval( callback +"(" + jsonData+")");
+					else eval( callback(jsonData) );
+				}
+			}
+			
+			uifnPopupClose('popupPlan');
+		}
+	});
+	
+	$(document).ready(function() {
+		gagaAgGrid.createGrid('gridListPop', gridOptionsPopupPlan);
+		cfnCreateCalendar('#popupPlanTerms', 'popupDispStdt', 'popupDispEddt', false);
+		gagajf.setDate('popupDispStdt', 'popupDispEddt', '7d');
+	});
+	
+	
+	// 기획전 리스트 팝업============================================================================
+	/* var fnPlanSearch = function(sub){
+		if (sub == "View"){
+			cfnOpenPlanPopup('fnSetPlanSqView');
+		}else{
+			cfnOpenPlanPopup('fnSetPlanSq');
+		}
+	}
+
+	// 팝업 등록 기획전
+	var fnSetPlanSq = function(result) {
+		$('#planListSearchForm input[name=planSq]').val(result[0].planSq);
+	}
+
+	//미리보기 기획전
+	var fnSetPlanSqView = function(result) {
+		$('#planSqView').val(result[0].planSq);
+	}
+ */
+	
+	//=========================================================================================
+/*]]>*/
+</script>
+
+</html>

+ 1 - 1
src/main/webapp/ux/js/admin.popup.js

@@ -563,7 +563,7 @@ var cfnOpenCouponRetrievePopup = function(sName, oParam) {
  * @author : yujung
  */
 var cfnOpenPlanPopup = function(callbackfun) {
-	var actionUrl = "/marketing/plan/list/popup";
+	var actionUrl = "/marketing/planning/list/popup";
 	if (typeof(callbackfun) != 'undefined') actionUrl += "?callBackFun=" + callbackfun;
 
 	cfnOpenModalPopup(actionUrl,'popupPlan');