فهرست منبع

통계 작업

yujung 4 سال پیش
والد
کامیت
0bff4450a2

+ 2 - 2
src/main/java/com/style24/admin/biz/dao/TsaStatisticsDao.java

@@ -184,12 +184,12 @@ public interface TsaStatisticsDao {
 
 	Collection<Statistics> getCustomerUnloginList();
 
-	Collection<Statistics> getCustomerUnloginInfoList();
+	Collection<GagaMap> getCustomerUnloginInfoList(Statistics statistics);
 
 	Collection<Statistics> getCustomerMarketingList();
 
 	Collection<Statistics> getCustomerDormRemainList();
 
-	Collection<Statistics> getCustomerDormRemainInfoList();
+	Collection<GagaMap> getCustomerDormRemainInfoList(Statistics statistics);
 
 }

+ 100 - 5
src/main/java/com/style24/admin/biz/service/TsaStatisticsService.java

@@ -5,6 +5,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import com.style24.admin.support.security.session.TsaSession;
 import org.apache.catalina.mapper.Mapper;
 import org.apache.commons.collections4.map.LinkedMap;
 import org.apache.commons.lang3.StringUtils;
@@ -318,9 +319,9 @@ public class TsaStatisticsService {
 		return statisticsDao.getCustomerUnloginList();
 	}
 
-	public Collection<Statistics> getCustomerUnloginInfoList() {
-		return statisticsDao.getCustomerUnloginInfoList();
-	}
+//	public Collection<Statistics> getCustomerUnloginInfoList() {
+//		return statisticsDao.getCustomerUnloginInfoList();
+//	}
 
 	public Collection<Statistics> getCustomerMarketingList() {
 		return statisticsDao.getCustomerMarketingList();
@@ -330,7 +331,101 @@ public class TsaStatisticsService {
 		return statisticsDao.getCustomerDormRemainList();
 	}
 
-	public Collection<Statistics> getCustomerDormRemainInfoList() {
-		return statisticsDao.getCustomerDormRemainInfoList();
+//	public Collection<Statistics> getCustomerDormRemainInfoList() {
+//		return statisticsDao.getCustomerDormRemainInfoList();
+//	}
+
+	/**
+	 * 미로그인회원현황 엑셀다운로드
+	 * @param
+	 * @return
+	 * @author yujung
+	 * @since 2021. 09. 30
+	 */
+	public void getCustomerUnloginExcelList(Statistics statistics, String excelFilenameWithPath) {
+		statistics.setRegNo(TsaSession.getInfo().getUserNo());
+
+		List<String> colInfoList = new ArrayList<String>();
+		String[] listTitles;
+		String[] cellNames;
+		String[] cellTypes;
+
+		colInfoList.add("아이디|CUST_ID|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("회원명|CUST_NM|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("개월수|MONTHS|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("휴대폰번호|CELL_PHNNO|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("이메일|EMAIL|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("생년|BIRTH_YM|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+
+		listTitles = new String[colInfoList.size()];
+		cellNames = new String[colInfoList.size()];
+		cellTypes = new String[colInfoList.size()];
+
+		String[] temp;
+		int i = 0;
+		for (String colInfo : colInfoList) {
+			temp = colInfo.split("\\|");
+			listTitles[i] = temp[0];
+			cellNames[i] = temp[1];
+			cellTypes[i] = temp[2];
+			i++;
+		}
+
+		String targetPath = env.getProperty("upload.goods.view");
+		Collection<GagaMap> customerUnloginInfoList = statisticsDao.getCustomerUnloginInfoList(statistics); // map형식으로 조회
+
+		try {
+			GagaExcelUtil.createExcel(excelFilenameWithPath, customerUnloginInfoList, "미로그인회원현황", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
+		} catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+
+	}
+
+	/**
+	 * 휴면전환 잔여일별 회원 리스트 엑셀다운로드
+	 * @param
+	 * @return
+	 * @author yujung
+	 * @since 2021. 09. 30
+	 */
+	public void getCustomerDormRemainExcelList(Statistics statistics, String excelFilenameWithPath) {
+		statistics.setRegNo(TsaSession.getInfo().getUserNo());
+
+		List<String> colInfoList = new ArrayList<String>();
+		String[] listTitles;
+		String[] cellNames;
+		String[] cellTypes;
+
+		colInfoList.add("구분|GB|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("아이디|CUST_ID|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("회원명|CUST_NM|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("휴대폰번호|CELL_PHNNO|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("이메일|EMAIL|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+		colInfoList.add("생년|BIRTH_YM|"+ GagaExcelConstants.CellType.CHAR_CENTER.name());
+
+		listTitles = new String[colInfoList.size()];
+		cellNames = new String[colInfoList.size()];
+		cellTypes = new String[colInfoList.size()];
+
+		String[] temp;
+		int i = 0;
+		for (String colInfo : colInfoList) {
+			temp = colInfo.split("\\|");
+			listTitles[i] = temp[0];
+			cellNames[i] = temp[1];
+			cellTypes[i] = temp[2];
+			i++;
+		}
+
+		String targetPath = env.getProperty("upload.goods.view");
+		Collection<GagaMap> customerDormRemainInfoList = statisticsDao.getCustomerDormRemainInfoList(statistics); // map형식으로 조회
+
+		try {
+			GagaExcelUtil.createExcel(excelFilenameWithPath, customerDormRemainInfoList, "휴면전환_잔여일별_회원", listTitles, cellNames, cellTypes, TsaConstants.EXCEL_FOOTER_TITLE);
+		} catch (Exception e) {
+			throw new IllegalStateException(e);
+		}
+
 	}
 }

+ 34 - 0
src/main/java/com/style24/admin/biz/web/TsaStatisticsController.java

@@ -1027,4 +1027,38 @@ public class TsaStatisticsController extends TsaBaseController {
 
 		return mav;
 	}
+
+	/**
+	 * 미로그인회원현황 엑셀다운로드
+	 * @param
+	 * @return
+	 * @author yujung
+	 * @since 2021. 09. 30
+	 */
+	@GetMapping("/customer/unlogin/excel")
+	public ResponseEntity<InputStreamResource> customerUnloginExcelList(HttpServletRequest request, Statistics statistics) throws Exception {
+		String excelfileName = "미로그인회원현황 " + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		statisticsService.getCustomerUnloginExcelList(statistics, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
+	}
+
+	/**
+	 * 휴면전환 잔여일별 회원현황 엑셀다운로드
+	 * @param
+	 * @return
+	 * @author yujung
+	 * @since 2021. 09. 30
+	 */
+	@GetMapping("/customer/dormremain/excel")
+	public ResponseEntity<InputStreamResource> customerDormremainExcelList(HttpServletRequest request, Statistics statistics) throws Exception {
+		String excelfileName = "휴면전환잔여일별회원 " + GagaDateUtil.getTodayDateTime() + ".xlsx";
+		String excelFilenameWithPath = GagaFileUtil.getConcatenationPath(env.getProperty("download.path"), "excel", excelfileName);
+
+		statisticsService.getCustomerDormRemainExcelList(statistics, excelFilenameWithPath);
+
+		return GagaFileUtil.writeFile(request, excelFilenameWithPath);
+	}
 }

+ 105 - 23
src/main/java/com/style24/persistence/mybatis/shop/TsaStatistics.xml

@@ -2455,19 +2455,57 @@
 	</select>
 
 	<!-- 미로그인현황 회원리스트 -->
-	<select id="getCustomerUnloginInfoList" resultType="Statistics">
+	<select id="getCustomerUnloginInfoList" parameterType="Statistics" resultType="paramMap">
 		/* TsaStatistics.getCustomerUnloginInfoList */
-		SELECT
-			CUST_ID
-			, FN_DEC_AES(CUST_NM) AS CUST_NM
-			, TIMESTAMPDIFF(MONTH, LOGIN_LDT, NOW()) AS MONTHS
-			, FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
-			, FN_DEC_AES(EMAIL) AS EMAIL
-			, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
-		FROM TB_CUSTOMER
-		WHERE CUST_NO > 0
-			AND CUST_STAT = 'G104_10'
-			AND LOGIN_LDT &lt; DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H%i%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+		SELECT (
+		        SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                         THEN A.CUST_ID
+		                    ELSE CONCAT(LEFT(A.CUST_ID, 3), REPEAT('*', CHAR_LENGTH(A.CUST_ID) - 3 ) )
+		               END
+		        FROM   TB_USER
+		        WHERE  USER_NO = #{regNo}
+		       ) AS CUST_ID
+		     , (
+		        SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                         THEN A.CUST_NM
+		                    ELSE CONCAT(LEFT(A.CUST_NM, 1), REPEAT('*', CHAR_LENGTH(A.CUST_NM) - 1 ) )
+		               END
+		        FROM   TB_USER
+		        WHERE  USER_NO = #{regNo}
+		       ) AS CUST_NM
+		    , (
+		       SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                        THEN A.CELL_PHNNO
+		                   ELSE CONCAT(substr(A.CELL_PHNNO, 1, 4), '****', substr(A.CELL_PHNNO, 9, 13))
+		              END
+		       FROM   TB_USER
+		       WHERE  USER_NO = #{regNo}
+		      ) AS CELL_PHNNO
+		    , (
+		       SELECT CASE WHEN ROLE_CD = 'G001_0000'
+		                        THEN A.EMAIL
+		                   ELSE CONCAT(LEFT(A.EMAIL, 2), REPEAT('*', instr(A.EMAIL, '@') - 3), SUBSTRING(A.EMAIL, instr(EMAIL, '@'), LENGTH(A.EMAIL)))
+		              END
+		       FROM   TB_USER
+		       WHERE  USER_NO = #{regNo}
+		      ) AS EMAIL
+		    , MONTHS
+		    , BIRTH_YM
+		FROM   (
+		        SELECT CUST_ID
+		             , FN_DEC_AES(CUST_NM)                    AS CUST_NM
+		             , TIMESTAMPDIFF(MONTH, LOGIN_LDT, NOW()) AS MONTHS
+		             , CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+		                    ELSE CELL_PHNNO
+		               END                                    AS CELL_PHNNO
+		             , FN_DEC_AES(EMAIL)                      AS EMAIL
+		             , SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
+		        FROM   TB_CUSTOMER
+		        WHERE  CUST_NO > 0
+		        AND    CUST_STAT = 'G104_10'
+		        AND    LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y%m%d%H'), '%Y-%m-%d %H:%i:%s') -- now() 수정 : 조회시점의 시간까지만. ex) 2019년9월25일15시 조회 -> 20210925150000
+		       ) A
 	</select>
 
 	<!-- 마케팅수신동의현황 -->
@@ -2570,16 +2608,51 @@
 	</select>
 
 	<!-- 휴면전환 잔여일별현황 회원리스트 -->
-	<select id="getCustomerDormRemainInfoList" resultType="Statistics">
+	<select id="getCustomerDormRemainInfoList" parameterType="Statistics" resultType="paramMap">
 	/* TsaStatistics.getCustomerDormRemainInfoList */
-		SELECT
-			*
+		SELECT GB
+			 , BIRTH_YM
+		     , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.CUST_ID
+				   	        ELSE CONCAT(LEFT(A.CUST_ID, 3), REPEAT('*', CHAR_LENGTH(A.CUST_ID) - 3 ) )
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS CUST_ID
+			 , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.CUST_NM
+						    ELSE CONCAT(LEFT(A.CUST_NM, 1), REPEAT('*', CHAR_LENGTH(A.CUST_NM) - 1 ) )
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS CUST_NM
+			 , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.CELL_PHNNO
+						    ELSE CONCAT(substr(A.CELL_PHNNO, 1, 4), '****', substr(A.CELL_PHNNO, 9, 13))
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS CELL_PHNNO
+			 , (
+			    SELECT CASE WHEN ROLE_CD = 'G001_0000'
+							     THEN A.EMAIL
+						    ELSE CONCAT(LEFT(A.EMAIL, 2), REPEAT('*', instr(A.EMAIL, '@') - 3), SUBSTRING(A.EMAIL, instr(EMAIL, '@'), LENGTH(A.EMAIL)))
+					   END
+			    FROM   TB_USER
+			    WHERE  USER_NO = #{regNo}
+		       ) AS EMAIL
 		FROM (
 			-- 12개월
 			SELECT '12개월' AS GB -- 12개월
 				, CUST_ID
 				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
 				, FN_DEC_AES(EMAIL) AS EMAIL
 				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
 			FROM TB_CUSTOMER
@@ -2591,40 +2664,49 @@
 			SELECT '9개월' AS GB -- 9개월
 				, CUST_ID
 				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
 				, FN_DEC_AES(EMAIL) AS EMAIL
 				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
 			FROM TB_CUSTOMER
 			WHERE CUST_NO > 0
 				AND CUST_STAT = 'G104_10'
 				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT <![CDATA[ < ]]>  DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -1 DAY ), '%Y%m%d%H%i%s')
 			-- 6개월
 			UNION ALL
 			SELECT '6개월' AS GB -- 6개월
 				, CUST_ID
 				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
 				, FN_DEC_AES(EMAIL) AS EMAIL
 				, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
 			FROM TB_CUSTOMER
 			WHERE CUST_NO > 0
 				AND CUST_STAT = 'G104_10'
 				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
+				AND LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -3 MONTH ), '%Y%m%d%H%i%s')
 			-- 3개월
 			UNION ALL
 			SELECT '3개월' AS GB -- ~3개월
 				, CUST_ID
 				, FN_DEC_AES(CUST_NM) AS CUST_NM
-				, FN_DEC_AES(CELL_PHNNO) AS CELL_PHNNO
+				, CASE WHEN CELL_PHNNO != 'xx'
+		                         THEN FN_DEC_AES(CELL_PHNNO)
+					   ELSE CELL_PHNNO
+				  END                                AS CELL_PHNNO
 				, FN_DEC_AES(EMAIL) AS EMAIL
 			, SUBSTRING(FN_DEC_AES(BIRTH_YMD), 1, 6) AS BIRTH_YM
 			FROM TB_CUSTOMER
 			WHERE CUST_NO > 0
 				AND CUST_STAT = 'G104_10'
 				AND LOGIN_LDT >= DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -9 MONTH ), '%Y%m%d%H%i%s')
-				AND LOGIN_LDT &lt; DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
-		) Z
+				AND LOGIN_LDT <![CDATA[ < ]]> DATE_FORMAT(DATE_ADD(STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H'), '%Y%m%d%H'), INTERVAL -6 MONTH ), '%Y%m%d%H%i%s')
+		) A
 	</select>
 </mapper>

+ 11 - 7
src/main/webapp/WEB-INF/views/statistics/CustomerActiveForm.html

@@ -25,8 +25,7 @@
 
 		<!-- 검색조건 영역 -->
 		<div class="panelStyle">
-			[[${#calendars.format(#calendars.createNow(), 'yyyy-MM-dd hh:00:00')}]];
-			* 2020년 12월 25일 02:00 기준 / 휴면 회원 제외
+			* [[${#calendars.format(#calendars.createNow(), 'yyyy년 MM월 dd일 hh:00:00')}]] / 휴면 회원 제외
 			<!-- 리스트 영역 -->
 			<div class="panelStyle">
 				<ul class="panelBar">
@@ -56,7 +55,7 @@
 								</tr>
 							</tbody>
 						</table>
-						<button type="button" class="btn btn-default btn-lg" onclick="fnExcelDownLoad();">엑셀다운로드</button>
+						<button type="button" class="btn btn-default btn-lg" onclick="fnExcelDownLoad('unlogin');">엑셀다운로드</button>
 					</li>
 					<li class="right"  style="width: 50%;">
 						<div id="chart2" class="chartUnit c3" style="max-height: 300px; position: relative;"></div>
@@ -109,10 +108,11 @@
 							</tr>
 							</tbody>
 						</table>
-						<button type="button" class="btn btn-default btn-lg" onclick="fnExcelDownLoad();">엑셀다운로드</button>
+						<button type="button" class="btn btn-default btn-lg" onclick="fnExcelDownLoad('dormRemain');">엑셀다운로드</button>
 					</li>
 				</ul>
 			</div>
+			<a href="javascript:void(0);" id="excelList" style="display: none;"></a>
 		</div>
 		<!-- 검색조건 영역 -->
 
@@ -227,9 +227,13 @@
 
 	});
 
-	$(document).ready(function() {
-		console.log(unloginList[0]);
-	});
+	// 엑셀다운로드 클릭 시
+	var fnExcelDownLoad = function(type) {
+		var actionUrl = '/statistics/customer/unlogin/excel';
+		if ( type != 'unlogin') actionUrl = '/statistics/customer/dormremain/excel';
+
+		$('#excelList').attr({ href : actionUrl }).get(0).click();
+	}
 
 /*]]>*/
 </script>