Jelajahi Sumber

Merge branch 'sowon' into develop

sowon4187 5 tahun lalu
induk
melakukan
daec4e1fb1

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

@@ -102,4 +102,4 @@ public interface TsaMailTemplateDao {
 	 */
 	void deleteMktmailList(MktmailManagement mktMailManagement);
 
-}
+}

+ 30 - 0
src/main/java/com/style24/admin/biz/dao/TsaPollDao.java

@@ -54,6 +54,36 @@ public interface TsaPollDao {
 	 * @since 2021. 2. 19
 	 */
 	Collection<Poll> getPollList(Poll poll);
+	
+	/**
+	 * POLL 투표자 목록
+	 *
+	 * @param Poll
+	 * @return Poll목록
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	Collection<Poll> getPollVoterList(Poll poll);
+	
+	/**
+	 * POLL 보기 조회
+	 *
+	 * @param Poll
+	 * @return Poll 보기 
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	Collection<Poll> getPollQuestion(Poll poll);
+	
+	/**
+	 * POLL ANSWER 조회
+	 *
+	 * @param Poll
+	 * @return Poll ANSWER 
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	Collection<Poll> getPollAnswer(Poll poll);
 
 
 }

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

@@ -380,4 +380,4 @@ public class TsaMailTemplateService {
 	}
 	
 
-}
+}

+ 37 - 0
src/main/java/com/style24/admin/biz/service/TsaPollService.java

@@ -1,6 +1,9 @@
 package com.style24.admin.biz.service;
 
 import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.NoSuchElementException;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -81,6 +84,40 @@ public class TsaPollService {
 	public Collection<Poll> getPollList(Poll poll) {
 		return pollDao.getPollList(poll);
 	}
+	
+	/**
+	 * POLL 투표자 목록
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	public Collection<Poll> getPollVoterList(Poll poll) {
+		return pollDao.getPollVoterList(poll);
+	}
+	
+	/**
+	 * POLL 보기 목록
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	public Collection<Poll> getPollQuestion(Poll poll) {
+		return pollDao.getPollAnswer(poll);
+	}
+	
+	/**
+	 * POLL ANSWER조회
+	 *
+	 * @return
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	public Collection<Poll> getPollAnswer(Poll poll) {
+		return pollDao.getPollAnswer(poll);
+	}
+	
 
 
 }

+ 35 - 4
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -1581,7 +1581,7 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
 			
 			// 상위제휴채널 조회
-			mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
+			mav.addObject("upperAfLinkCdList", rendererService.getAvailCommonCodeList("G053"));
 
 		} else if(param.getMode().equals("U")){ // 상세 일 때
 			mav.addObject("planInfo", planService.getPlanWebDetailInfo(param));
@@ -1602,7 +1602,7 @@ public class TsaMarketingController extends TsaBaseController {
 			mav.addObject("usableCustGbList", rendererService.getAvailCommonCodeList("G100"));
 						
 			// 상위제휴채널 조회
-			mav.addObject("upperAfLinkCdList", rendererService.getCommonCodeList("G053"));
+			mav.addObject("upperAfLinkCdList", rendererService.getAvailCommonCodeList("G053"));
 
 			//mav.addObject("planQuestionList", planService.getPlanQuestionList(param));
 
@@ -1610,7 +1610,7 @@ public class TsaMarketingController extends TsaBaseController {
 		}
 
 		// 사이트 목록
-		mav.addObject("siteList", rendererService.getCommonCodeList("G000"));
+		mav.addObject("siteList", rendererService.getAvailCommonCodeList("G000"));
 
 		// 공급업체 목록
 //		mav.addObject("supplyCompList", rendererService.getSupplyCompanyList());
@@ -1622,7 +1622,7 @@ public class TsaMarketingController extends TsaBaseController {
 //		mav.addObject("custGbList", rendererService.getCommonCodeList("G100", "Y"));
 		
 		// 사용가능 고객등급 조회
-		mav.addObject("usableCustGradeList", rendererService.getCommonCodeList("G110"));
+		mav.addObject("usableCustGradeList", rendererService.getAvailCommonCodeList("G110"));
 		
 		mav.addObject("mode", param.getMode());
 		mav.setViewName("marketing/PlanWebDetailPopupForm");
@@ -2075,7 +2075,38 @@ public class TsaMarketingController extends TsaBaseController {
 		return pollList;
 	}
 	
+	/**
+	 * POLL 투표자 목록
+	 *
+	 * @param POLL 조회 정보
+	 * @return POLL 목록
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	@PostMapping("/poll/voter/list")
+	@ResponseBody
+	public Collection<Poll> getPollVoterList(@RequestBody Poll poll) {
+		Collection<Poll> pollList = pollService.getPollVoterList(poll);
+		return pollList;
+	}
 	
+	/**
+	 * POLL detail 투표율
+	 * 
+	 * @param POLL 투표율
+	 * @return POLL 목록
+	 * @author sowon
+	 * @since 2021. 2. 22
+	 */
+	@GetMapping("/poll/voter/list/popup/form")
+	public ModelAndView pollVoterRate(Poll param) {
+		ModelAndView mav = new ModelAndView();
+		mav.addObject("pollQList", pollService.getPollQuestion(param));
+		mav.addObject("pollAList", pollService.getPollAnswer(param));
+		mav.setViewName("marketing/PollVoteRatePopupForm");
+		return mav;
+	}
+
 
 
 }

+ 3 - 6
src/main/java/com/style24/persistence/domain/Poll.java

@@ -44,6 +44,7 @@ public class Poll extends TscBaseDomain{
 	private String pollQval9;		// 투표문항참고값9
 	private String pollQval10;		// 투표문항참고값10
 	private Integer dispOrd;		// 표시 순서
+	private String pollQtypeNm;	// 문제유형 이름
 	
 	//poll_answer
 	private String ansCustNo;		// 투표회원번호
@@ -56,12 +57,8 @@ public class Poll extends TscBaseDomain{
 	
 	private Integer voteCnt;		// 투표수
 	private Integer voteRate;		// 투표율
-	
-	
-	
-	
-	
-	
+	private Integer numbers;		// 투표율 구하기위한 변수선언 
+	private String name;			// 투표율 구하기위한 변수선언 
 	private String voterNm;			// 투표자명
 	private String voteDt;			// 투표일시
 

+ 66 - 1
src/main/java/com/style24/persistence/mybatis/shop/TsaPoll.xml

@@ -111,6 +111,7 @@
 	
 	<!-- POLL 목록 -->
 	<select id="getPollList" parameterType="Poll" resultType="Poll">
+		/* TsaPoll.getPollList */
 		 SELECT   M.POLL_SQ                                                                                                     
 				, M.POLL_TITLE                                                                                                 
 				, M.DUP_PARTI_YN                                                                                               
@@ -133,6 +134,7 @@
 				, M.POLL_QVAL8                                                                                                 
 				, M.POLL_QVAL9                                                                                                 
 				, M.POLL_QVAL10    
+				, M.POLL_QTYPE_NM
 		 FROM
 		 (		      
 			SELECT A.POLL_SQ
@@ -146,7 +148,7 @@
 			      , A.REG_DT 
 			      , B.POLL_QSQ 
 			      , B.POLL_QTITLE 
-			      , CASE B.POLL_QTYPE WHEN 10 THEN '단수형' WHEN 20 THEN '복수형' WHEN 30 THEN '단답형' ELSE '서술형' END AS POLL_QTYPE
+			      , CASE B.POLL_QTYPE WHEN 10 THEN '단수형' WHEN 20 THEN '복수형' WHEN 30 THEN '단답형' ELSE '서술형' END AS POLL_QTYPE_NM
 			      , B.POLL_QVAL1 
 			      , B.POLL_QVAL2 
 			      , B.POLL_QVAL3 
@@ -157,6 +159,7 @@
 			      , B.POLL_QVAL8
 			      , B.POLL_QVAL9
 			      , B.POLL_QVAL10
+			      , B.POLL_QTYPE
 			FROM   TB_POLL A LEFT JOIN TB_POLL_QUESTION B ON A.POLL_SQ = B.POLL_SQ 
 			WHERE 1=1
 		  		 AND A.DEL_YN = 'N'
@@ -196,4 +199,66 @@
 			)M
 	
 	</select>
+	
+	<!-- POLL관리 투표자 목록 조회 -->
+	<select id="getPollVoterList" parameterType="Poll" resultType="Poll">
+		/* TsaPoll.getPollVoterList */
+		SELECT B.CUST_NM          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
+	</select>
+	
+	<!-- POLL QUESTION 보기 조회 -->
+	<select id="getPollQuestion" parameterType="Poll" resultType="Poll">
+		/* TsaPoll.getPollQuestion */
+		SELECT POLL_QSQ 
+		      ,POLL_QTITLE 
+		      ,POLL_QTYPE 
+		      ,POLL_QVAL1 
+		      ,POLL_QVAL2
+		      ,POLL_QVAL3 
+		      ,POLL_QVAL4 
+		      ,POLL_QVAL5 
+		      ,POLL_QVAL6 
+		      ,POLL_QVAL7 
+		      ,POLL_QVAL8 
+		      ,POLL_QVAL9 
+		      ,POLL_QVAL10 
+		FROM TB_POLL_QUESTION
+		WHERE POLL_QSQ = #{pollQsq}
+	</select>
+	
+	<!-- POLL ANSWER 조회 -->
+	<select id="getPollAnswer" parameterType="Poll" resultType="Poll">
+		/* TsaPoll.getPollAnswer */
+			SELECT M.NAME
+				  ,COUNT(M.NAME) AS VOTE_CNT
+				  ,M.POLL_QSQ
+				  ,M.POLL_QTYPE
+				  ,(COUNT(M.NAME)/CNT)*100 AS VOTE_RATE
+			FROM 
+			(
+				SELECT
+				  A.POLL_QSQ
+				  ,SUBSTRING_INDEX(SUBSTRING_INDEX(A.DUMMY , '|', NUMBERS.N), '|', -1) NAME
+				  ,A.POLL_QTYPE  
+				  ,COUNT(*) OVER(PARTITION BY POLL_QSQ)  AS CNT
+				FROM
+					  (SELECT 1 N UNION ALL
+					   SELECT 2 UNION ALL SELECT 3 UNION ALL
+					   SELECT 4 UNION ALL SELECT 5 UNION ALL
+					   SELECT 6 UNION ALL SELECT 7 UNION ALL
+					   SELECT 8 UNION ALL SELECT 9 UNION ALL
+					   SELECT 10 ) NUMBERS 
+				   INNER JOIN TB_POLL_ANSWER A ON CHAR_LENGTH(A.DUMMY)-CHAR_LENGTH(REPLACE(A.DUMMY, '|', ''))>=NUMBERS.N-1
+				WHERE POLL_QSQ = #{pollQsq}
+			)M
+			GROUP BY NAME,M.POLL_QSQ,M.POLL_QTYPE
+	</select>
 </mapper>

+ 15 - 5
src/main/webapp/WEB-INF/views/marketing/PollListForm.html

@@ -87,7 +87,7 @@
 						<table class="frmStyle">
 							<colgroup>
 								<col style="width:5%;"/>
-								<col style="";/>
+								<col style=""/>
 								<col style=""/>
 								<col style=""/>
 								<col style=""/>
@@ -211,7 +211,7 @@
 	</div>
 
 <!-- 문항 Start --------------------------------------------------------------->
-<table class="frmStyle" style="display: none;">
+<table class="frmStyle" style="display: none;" id="rowQuestion">
 	<tr id="trRowQuestion">
 	<td>
 		<input type="checkbox" name="chkIdx" style="margin-left: 10px; top: 50%;  left: 0;  width: 18px; height: 18px; transform: translate(0,-50%);"/>
@@ -275,9 +275,10 @@
 		{headerName: 'POLL번호'	, field:'pollSq'	, width:100, cellClass: 'text-center'
 			, cellRenderer: function(params) { return fnSetColumn(params); }
 		},
-		{headerName: 'POLL제목'	, field:'pollTitle'	, width:230, cellClass: 'text-left'
+		{headerName: 'POLL제목'	, field:'pollTitle'	, width:200, cellClass: 'text-left'
 			, cellRenderer: function(params) { return fnSetColumn(params); }
 		},
+		 {headerName: '문항유형'		, field:'pollQtypeNm', width:100, cellClass: 'text-center'},
 		 {headerName: '문항제목'		, field:'pollQtitle', width:230, cellClass: 'text-center'},
 		 {headerName: '등록일'		, field:'regDt'	, width:80, cellClass: 'text-center'},
 		/*{headerName: '투표율'		, field:'voteRate'	, width:80, cellClass: 'text-center'
@@ -287,6 +288,7 @@
 
 	var columnDefsVote = [
 		{headerName: '투표자명'		, 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'},
 	];
@@ -317,6 +319,7 @@
 			}
 		}
 	}
+		
 
 	// 셀 클릭 시
 	var selectPoll = [];
@@ -325,8 +328,13 @@
 			$('#registerForm input[name=pollTitle]').focus();
 			fnAllDeleteQuestion();
 			fnSetDetail(event);
-		} else if (event.colDef.field == 'voteCnt') {
+		} 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');
+			}
 		}
 	}
 
@@ -389,7 +397,7 @@
 			$("#partiCnt").attr("disabled",false);
 		}else{
 			$("#partiCnt").attr("disabled",true);
-		}2ㅣ
+		}
 	}
 
 	// 검색
@@ -405,8 +413,10 @@
 		}else{
 			$("#partiCnt").attr("disabled",true);
 		}
+		
 	})
 	
+	
 	// 유효성
 	function validationPoll() {
 		if($('#registerForm input[name=pollTitle]').val() == ''){

+ 79 - 0
src/main/webapp/WEB-INF/views/marketing/PollVoteRatePopupForm.html

@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html lang="ko"
+	xmlns:th="http://www.thymeleaf.org">
+<!--
+ *******************************************************************************
+ * @source  : PollVoteRatePopup.html
+ * @desc    : Poll 투표율 확인 page
+ *============================================================================
+ * STYLE24
+ * Copyright(C) 2020 TSIT, All rights reserved.
+ *============================================================================
+ * VER  DATE         AUTHOR      DESCRIPTION
+ * ===  ===========  ==========  =============================================
+ * 1.0  2021.02.22   sowon     최초 작성
+ *******************************************************************************
+ -->s
+<div class="modalPopup" data-width="960" data-height="300" id="popupPollVoteRate">
+	<div id="panel" class="panelStyle">
+		<!-- TITLE -->
+		<div class="panelTitle">
+			<strong>POLL 투표율</strong>
+			<button type="button" class="close"
+				onclick="uifnPopupClose('popupPollVoteRate');">
+				<em class="fa fa-times"></em>
+			</button>
+		</div>
+		<!-- //TITLE -->
+
+		<!-- CONTENT -->
+		<div class="panelContent">
+				<div class="boxTitle"></div>
+				<input type="hidden" name="pollSq" />
+				<ul class="boxContent">
+					<li class="boxContentTop">
+						<table class="frmStyle">
+							<tbody>
+								<tr>
+									<td>
+										<div id="questionDiv" class="btn_left"
+											style="width: 100%; height: 200px; overflow: yes; overflow-x: auto; overflow-y: auto;">
+											<table class="tableStyle" id="questionTable" 
+												style="overflow-x: auto; overflow-y: auto;">
+												<colgroup>
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+													<col width="">
+												</colgroup>
+												<tbody>
+													<tr>
+														<td>문항</td>
+														<td>투표수</td>
+														<td>투표율</td>
+													</tr>								
+													<tr th:each="list : ${pollAList}" align="center">
+														<td>[[${list.name}]]</td>
+														<td>[[${list.voteCnt}]]</td>
+														<td><label>[[${list.voteRate}]]%</label></td>
+													</tr>
+												</tbody>
+											</table>
+										</div>
+									</td>
+								</tr>
+							</tbody>
+						</table>
+					</li>
+					<li class="boxContentBtnB"><span class="btnRight"> </span></li>
+				</ul>
+
+			</div>
+		</div>
+	</div>