From ae439b7e640e39896f0acb6ee92987add9845305 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 31 Mar 2025 12:37:32 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=BC=EB=B3=84=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EC=88=98=20=ED=86=B5=EA=B3=84=20-=20?= =?UTF-8?q?=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D=20=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/AdminMemberStatisticsRepository.kt | 31 +++++++++++++++++++ .../member/AdminMemberStatisticsService.kt | 8 +++++ .../member/GetMemberStatisticsResponse.kt | 2 ++ 3 files changed, 41 insertions(+) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt index e2f52a3..003c079 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsRepository.kt @@ -10,6 +10,7 @@ import kr.co.vividnext.sodalive.can.payment.PaymentStatus import kr.co.vividnext.sodalive.can.payment.QPayment.payment import kr.co.vividnext.sodalive.member.QMember.member import kr.co.vividnext.sodalive.member.QSignOut.signOut +import kr.co.vividnext.sodalive.member.auth.QAuth.auth import org.springframework.stereotype.Repository import java.time.LocalDateTime @@ -27,6 +28,18 @@ class AdminMemberStatisticsRepository(private val queryFactory: JPAQueryFactory) .size } + fun getTotalAuthCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(auth.id) + .from(auth) + .where( + auth.createdAt.goe(startDate), + auth.createdAt.loe(endDate) + ) + .fetch() + .size + } + fun getTotalSignOutCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { return queryFactory .select(signOut.id) @@ -79,6 +92,24 @@ class AdminMemberStatisticsRepository(private val queryFactory: JPAQueryFactory) .fetch() } + fun getAuthCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List { + return queryFactory + .select( + QDateAndMemberCount( + getFormattedDate(auth.createdAt), + auth.id.countDistinct().castToNum(Int::class.java) + ) + ) + .from(auth) + .where( + auth.createdAt.goe(startDate), + auth.createdAt.loe(endDate) + ) + .groupBy(getFormattedDate(auth.createdAt)) + .orderBy(getFormattedDate(auth.createdAt).desc()) + .fetch() + } + fun getSignOutCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List { return queryFactory .select( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt index f124a49..d15ed01 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/AdminMemberStatisticsService.kt @@ -46,6 +46,7 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics .toLocalDateTime() val totalSignUpCount = repository.getTotalSignUpCount(startDate = startDateTime, endDate = endDateTime) + val totalAuthCount = repository.getTotalAuthCount(startDate = startDateTime, endDate = endDateTime) val totalSignOutCount = repository.getTotalSignOutCount(startDate = startDateTime, endDate = endDateTime) val totalPaymentMemberCount = repository.getPaymentMemberCount(startDate = startDateTime, endDate = endDateTime) @@ -64,6 +65,11 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics endDate = endDateTime ).associateBy({ it.date }, { it.memberCount }) + val authCountInRange = repository.getAuthCountInRange( + startDate = startDateTime, + endDate = endDateTime + ).associateBy({ it.date }, { it.memberCount }) + val signOutCountInRange = repository.getSignOutCountInRange( startDate = startDateTime, endDate = endDateTime @@ -83,6 +89,7 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics val date = it.format(formatter) GetMemberStatisticsItem( date = date, + authCount = authCountInRange[date] ?: 0, signUpCount = signUpCountInRange[date] ?: 0, signOutCount = signOutCountInRange[date] ?: 0, paymentMemberCount = paymentMemberCountInRangeMap[date] ?: 0 @@ -92,6 +99,7 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics return GetMemberStatisticsResponse( totalCount = dateRange.totalDays, + totalAuthCount = totalAuthCount, totalSignUpCount = totalSignUpCount, totalSignOutCount = totalSignOutCount, totalPaymentMemberCount = totalPaymentMemberCount, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt index 7a0d7ea..3dd6f5e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/member/GetMemberStatisticsResponse.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.admin.statistics.member data class GetMemberStatisticsResponse( val totalCount: Int, + val totalAuthCount: Int, val totalSignUpCount: Int, val totalSignOutCount: Int, val totalPaymentMemberCount: Int, @@ -10,6 +11,7 @@ data class GetMemberStatisticsResponse( data class GetMemberStatisticsItem( val date: String, + val authCount: Int, val signUpCount: Int, val signOutCount: Int, val paymentMemberCount: Int -- 2.40.1