sowon4187 4 سال پیش
والد
کامیت
862fd3bd93

+ 30 - 1
src/main/java/com/style24/persistence/domain/Poll.java

@@ -1,7 +1,9 @@
 package com.style24.persistence.domain;
 
 
+import com.style24.admin.support.security.session.TsaSession;
 import com.style24.core.support.session.TscSession;
+import com.style24.core.support.util.CryptoUtils;
 import com.style24.core.support.util.MaskingUtils;
 import com.style24.persistence.TscBaseDomain;
 
@@ -62,8 +64,9 @@ public class Poll extends TscBaseDomain{
 	private int voteRate;		// 투표율
 	private int numbers;		// 투표율 구하기위한 변수선언 
 	private String name;			// 투표율 구하기위한 변수선언 
-	private String voterNm;			// 투표자명
+	private String custNm;			// 투표자명
 	private String voteDt;			// 투표일시
+	private String custId;		//투표자 아이디
 	
 	private String ques1;
 	private String ques2;
@@ -75,6 +78,32 @@ public class Poll extends TscBaseDomain{
 	private String ques8;
 	private String ques9;
 	private String ques10;
+	 
+	private String dummy1;
+	private String dummy2;
+	private String dummy3;
+	private String dummy4;
+	private String dummy5;
+	private String dummy6;
+	private String dummy7;
+	private String dummy8;
+	private String dummy9;
+	private String dummy10;
+
+	
+	// 암호화 대상 복호화 처리
+	public String getCustNm() {
+		this.custNm = CryptoUtils.decryptAES(this.custNm);
+		return this.custNm;
+	}
+
+	// Masking
+	public String getMaskingCustId() {
+		return TsaSession.getAttribute("maskingYn").equals("Y") ? MaskingUtils.id(this.custId) : this.custId;
+	}
+	public String getMaskingCustNm() {
+		return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.name(getCustNm()) : getCustNm();
+	}
 	
 	
 

+ 56 - 9
src/main/java/com/style24/persistence/mybatis/shop/TsaPoll.xml

@@ -232,15 +232,61 @@
 	<!-- POLL관리 투표자 목록 조회 -->
 	<select id="getPollVoterList" parameterType="Poll" resultType="Poll">
 		/* TsaPoll.getPollVoterList */
-		SELECT B.CUST_ID         AS VOTER_NM    
-		     , A.ANS_CUST_NO      AS ANS_CUST_NO 
-		     , A.REG_DT			  AS VOTE_DT   
-		     , A.DUMMY		      AS DUMMY  
-		FROM   TB_POLL_ANSWER A
-		     , TB_CUSTOMER B
-		WHERE  A.ANS_CUST_NO = B.CUST_NO
-		AND    A.POLL_QSQ = #{pollQsq}
-		ORDER  BY B.CUST_NM
+		WITH TAB AS (
+		    -- 설문의 질문 목록
+		    SELECT POLL_SQ
+		         , POLL_QSQ
+		         , POLL_QTITLE
+		         , RANK() OVER(ORDER BY POLL_QSQ) AS RK
+		    FROM   TB_POLL_QUESTION
+		    WHERE  POLL_SQ = #{pollSq}
+		    AND    DEL_YN = 'N'
+		    ORDER  BY POLL_QSQ
+		    LIMIT 10
+		)
+		SELECT Z.ANS_CUST_NO
+		      ,Z.REG_DT AS VOTE_DT
+		      ,Z.POLL_SQ
+		      ,Z.ANS_INDEX
+		      ,C.CUST_NM 
+		      ,C.CUST_ID 
+		      ,Z.DUMMY1  
+		      ,Z.DUMMY2  
+		      ,Z.DUMMY3  
+		      ,Z.DUMMY4  
+		      ,Z.DUMMY5  
+		      ,Z.DUMMY6  
+		      ,Z.DUMMY7  
+		      ,Z.DUMMY8  
+		      ,Z.DUMMY9  
+		      ,Z.DUMMY10 
+		FROM (
+		-- 고객별 답변 목록
+		SELECT B.ANS_CUST_NO
+		     , B.ANS_INDEX
+		     , A.POLL_SQ
+		     , DATE_FORMAT(B.REG_DT, '%Y-%m-%d') AS REG_DT 
+		     , MAX(CASE WHEN A.RK = 1  THEN B.DUMMY ELSE '' END) AS DUMMY1
+		     , MAX(CASE WHEN A.RK = 2  THEN B.DUMMY ELSE '' END) AS DUMMY2
+		     , MAX(CASE WHEN A.RK = 3  THEN B.DUMMY ELSE '' END) AS DUMMY3
+		     , MAX(CASE WHEN A.RK = 4  THEN B.DUMMY ELSE '' END) AS DUMMY4
+		     , MAX(CASE WHEN A.RK = 5  THEN B.DUMMY ELSE '' END) AS DUMMY5
+		     , MAX(CASE WHEN A.RK = 6  THEN B.DUMMY ELSE '' END) AS DUMMY6
+		     , MAX(CASE WHEN A.RK = 7  THEN B.DUMMY ELSE '' END) AS DUMMY7
+		     , MAX(CASE WHEN A.RK = 8  THEN B.DUMMY ELSE '' END) AS DUMMY8
+		     , MAX(CASE WHEN A.RK = 9  THEN B.DUMMY ELSE '' END) AS DUMMY9
+		     , MAX(CASE WHEN A.RK = 10 THEN B.DUMMY ELSE '' END) AS DUMMY10
+		FROM   TAB A
+		     , TB_POLL_ANSWER B
+		WHERE  A.POLL_QSQ = B.POLL_QSQ
+		GROUP  BY B.ANS_CUST_NO
+		         ,B.REG_DT 
+		         ,B.ANS_INDEX
+		         ,A.POLL_SQ
+		)Z
+		INNER JOIN TB_CUSTOMER C ON Z.ANS_CUST_NO = C.CUST_NO 
+		WHERE Z.ANS_INDEX != 0
+		ORDER BY Z.REG_DT ASC
 	</select>
 	
 	<!-- POLL QUESTION 보기 조회 -->
@@ -296,5 +342,6 @@
 		SELECT POLL_QTITLE 
 		FROM TB_POLL_QUESTION TPQ 
 		WHERE POLL_SQ = #{pollSq}
+		AND DEL_YN = 'N'
 	</select>
 </mapper>

+ 53 - 13
src/main/webapp/WEB-INF/views/marketing/PollListForm.html

@@ -69,7 +69,7 @@
 				<li style="width:40%">
 					<div class="panelBar">
 						<ul class="panelBar">
-						<h4 id="pollQtitle">투표자 수</h4>
+						<!-- <h4 id="pollQtitle">투표자 수</h4> -->
 							<li class="right">
 								<button type="button" class="btn btn-default btn-lg" id="btnExcel">엑셀다운로드</button>
 							</li>
@@ -302,10 +302,21 @@
 	];
 
 	var columnDefsVote = [
-		{headerName: '투표자ID'		, field:'voterNm'	, width:150, cellClass: 'text-center'},
-		{headerName: '답변'	, field:'dummy'	, width:200, cellClass: 'text-center'},
-		{headerName: '투표자회원번호'	, field:'ansCustNo'	, width:200, cellClass: 'text-center'},
-		{headerName: '투표일시'		, field:'voteDt'	, width:200, cellClass: 'text-center'},
+		{headerName: 'ID'			, field:'maskingCustId'	, width:100, cellClass: 'text-center',enableValue: true},
+		{headerName: '이름'			, field:'maskingCustNm'	, width:100, cellClass: 'text-center',enableValue: true},
+		{headerName: '투표일시'		, field:'voteDt'	, width:100, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques1'	    , field:'dummy1'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques2'	    , field:'dummy2'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques3'	    , field:'dummy3'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques4'	    , field:'dummy4'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques5'	    , field:'dummy5'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques6'	    , field:'dummy6'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques7'	    , field:'dummy7'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques8'	    , field:'dummy8'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques9'	    , field:'dummy9'	, width:200, cellClass: 'text-center',enableValue: true},
+		{headerName: 'ques10'	    , field:'dummy10'	, width:200, cellClass: 'text-center',enableValue: true},
+		/* {headerName: '투표자회원번호'	, field:'ansCustNo'	, width:200, cellClass: 'text-center'}, */
+		
 	];
 
 	var gridOptionsPoll = gagaAgGrid.getGridOptions(columnDefsPoll);
@@ -340,12 +351,14 @@
 	var selectPoll = [];
 	gridOptionsPoll.onCellClicked = function(event)  {
 		if (event.colDef.field == 'pollTitle') {
-			$('#registerForm input[name=pollTitle]').focus();
+			//$('#registerForm input[name=pollTitle]').focus();
 			fnAllDeleteQuestion();
 			fnSetDetail(event);
-		} else if (event.colDef.field == 'pollQtitle') {
 			fnSearchVote(event.data);
-		} else if (event.colDef.field == 'pollQtypeNm'){
+			
+		} /* else if (event.colDef.field == 'pollQtitle') {
+			fnSearchVote(event.data);
+		} */ else if (event.colDef.field == 'pollQtypeNm'){
 			if(event.data.pollQtypeNm == '단수형' || event.data.pollQtypeNm == '복수형'){
 				var actionUrl = "/marketing/poll/voter/list/popup/form?pollQsq=" + event.data.pollQsq +"&pollQtype=" + event.data.pollQtype;
 				cfnOpenModalPopup(actionUrl, 'pollVoteRatePopup');
@@ -353,21 +366,44 @@
 		}
 	}
 
+	// Grid 속성 변경
+/* 	var fnChangeGridProperty = function() {
+		
+		
+	} */
+	
 	// 투표자 조회
 	var fnSearchVote = function(data) {
-		if (gagajf.isNull(data.pollQtitle)) {
+		
+		/* if (gagajf.isNull(data.pollQtitle)) {
 			$('#pollQtitle').text(' 투표자수');
 		} else {
 			$('#pollQtitle').text(' [' + data.pollQtitle + '] 투표자수');
-		}
-
-
+		} */
 		var params = new Object();
 		params.pollQsq = data.pollQsq;
-
+		params.pollSq = data.pollSq;
+	
 		var jsonData = JSON.stringify(params);
 		gagajf.ajaxJsonSubmit('/marketing/poll/voter/list', jsonData, function(dataList) {
+			// 컬럼 이름 변경
+			$.each(dataList.questionList, function(idx, item) {
+				gagaAgGrid.setColumnHeaderName(gridOptionsVote, 'dummy' + (idx+1), item.pollQtitle);
+			});
+			
+			gridOptionsVote.columnApi.resetColumnState();
 			gridOptionsVote.api.setRowData(dataList.pollList);
+			
+			// 컬럼 숨김 처리
+			/*  for (var k = 1; k <= 10; k++) {
+				// 컬럼 숨긴걸 초기화 한다.
+				gagaAgGrid.showOrHideColumn(gridOptionsVote, 'ques' + k, true);
+			
+				// 컬럼을 숨긴다.
+				if (k > dataList.questionList.length) {
+					gagaAgGrid.showOrHideColumn(gridOptionsVote, 'ques' + k, false);
+				}
+			}  */
 		});
 
 	}
@@ -463,6 +499,10 @@
 
 	// 문항추가
 	var fnAddQuestion = function(data) {
+		if ($('#questionTable tr').length > 10) {
+			mcxDialog.alert('문항은 최대 10개까지 등록 가능합니다.');
+			return;
+		}
 		if (typeof data == 'undefined') {
 			var cnt = $('#questionTable tr').length;