parent
1dec8913c5
commit
74fecddf95
|
@ -21,8 +21,7 @@ class AdminMemberStatisticsController(private val service: AdminMemberStatistics
|
||||||
service.getStatistics(
|
service.getStatistics(
|
||||||
startDateStr = startDateStr,
|
startDateStr = startDateStr,
|
||||||
endDateStr = endDateStr,
|
endDateStr = endDateStr,
|
||||||
offset = pageable.offset,
|
pageable = pageable
|
||||||
limit = pageable.pageSize.toLong()
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,41 +39,7 @@ class AdminMemberStatisticsRepository(private val queryFactory: JPAQueryFactory)
|
||||||
.size
|
.size
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSignUpCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List<DateAndMemberCount> {
|
fun getPaymentMemberCount(startDate: LocalDateTime, endDate: LocalDateTime): Int {
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QDateAndMemberCount(
|
|
||||||
getFormattedDate(member.createdAt),
|
|
||||||
member.id.countDistinct().castToNum(Int::class.java)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(member)
|
|
||||||
.where(
|
|
||||||
member.createdAt.goe(startDate),
|
|
||||||
member.createdAt.loe(endDate)
|
|
||||||
)
|
|
||||||
.groupBy(getFormattedDate(member.createdAt))
|
|
||||||
.fetch()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getSignOutCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List<DateAndMemberCount> {
|
|
||||||
return queryFactory
|
|
||||||
.select(
|
|
||||||
QDateAndMemberCount(
|
|
||||||
getFormattedDate(signOut.createdAt),
|
|
||||||
signOut.id.countDistinct().castToNum(Int::class.java)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.from(signOut)
|
|
||||||
.where(
|
|
||||||
signOut.createdAt.goe(startDate),
|
|
||||||
signOut.createdAt.loe(endDate)
|
|
||||||
)
|
|
||||||
.groupBy(getFormattedDate(signOut.createdAt))
|
|
||||||
.fetch()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getPaymentMemberCountInRange(startDate: LocalDateTime, endDate: LocalDateTime): List<DateAndMemberCount> {
|
|
||||||
return queryFactory
|
return queryFactory
|
||||||
.select(
|
.select(
|
||||||
QDateAndMemberCount(
|
QDateAndMemberCount(
|
||||||
|
@ -92,6 +58,83 @@ class AdminMemberStatisticsRepository(private val queryFactory: JPAQueryFactory)
|
||||||
)
|
)
|
||||||
.groupBy(getFormattedDate(charge.createdAt))
|
.groupBy(getFormattedDate(charge.createdAt))
|
||||||
.fetch()
|
.fetch()
|
||||||
|
.sumOf { it.memberCount }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getSignUpCountInRange(
|
||||||
|
startDate: LocalDateTime,
|
||||||
|
endDate: LocalDateTime,
|
||||||
|
offset: Long,
|
||||||
|
limit: Long
|
||||||
|
): List<DateAndMemberCount> {
|
||||||
|
return queryFactory
|
||||||
|
.select(
|
||||||
|
QDateAndMemberCount(
|
||||||
|
getFormattedDate(member.createdAt),
|
||||||
|
member.id.countDistinct().castToNum(Int::class.java)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.from(member)
|
||||||
|
.where(
|
||||||
|
member.createdAt.goe(startDate),
|
||||||
|
member.createdAt.loe(endDate)
|
||||||
|
)
|
||||||
|
.groupBy(getFormattedDate(member.createdAt))
|
||||||
|
.offset(offset)
|
||||||
|
.limit(limit)
|
||||||
|
.fetch()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getSignOutCountInRange(
|
||||||
|
startDate: LocalDateTime,
|
||||||
|
endDate: LocalDateTime,
|
||||||
|
offset: Long,
|
||||||
|
limit: Long
|
||||||
|
): List<DateAndMemberCount> {
|
||||||
|
return queryFactory
|
||||||
|
.select(
|
||||||
|
QDateAndMemberCount(
|
||||||
|
getFormattedDate(signOut.createdAt),
|
||||||
|
signOut.id.countDistinct().castToNum(Int::class.java)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.from(signOut)
|
||||||
|
.where(
|
||||||
|
signOut.createdAt.goe(startDate),
|
||||||
|
signOut.createdAt.loe(endDate)
|
||||||
|
)
|
||||||
|
.groupBy(getFormattedDate(signOut.createdAt))
|
||||||
|
.offset(offset)
|
||||||
|
.limit(limit)
|
||||||
|
.fetch()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getPaymentMemberCountInRange(
|
||||||
|
startDate: LocalDateTime,
|
||||||
|
endDate: LocalDateTime,
|
||||||
|
offset: Long,
|
||||||
|
limit: Long
|
||||||
|
): List<DateAndMemberCount> {
|
||||||
|
return queryFactory
|
||||||
|
.select(
|
||||||
|
QDateAndMemberCount(
|
||||||
|
getFormattedDate(charge.createdAt),
|
||||||
|
member.id.countDistinct().castToNum(Int::class.java)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.from(charge)
|
||||||
|
.innerJoin(charge.member, member)
|
||||||
|
.leftJoin(charge.payment, payment)
|
||||||
|
.where(
|
||||||
|
charge.status.eq(ChargeStatus.CHARGE),
|
||||||
|
payment.status.eq(PaymentStatus.COMPLETE),
|
||||||
|
charge.createdAt.goe(startDate),
|
||||||
|
charge.createdAt.loe(endDate)
|
||||||
|
)
|
||||||
|
.groupBy(getFormattedDate(charge.createdAt))
|
||||||
|
.offset(offset)
|
||||||
|
.limit(limit)
|
||||||
|
.fetch()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFormattedDate(dateTimePath: DateTimePath<LocalDateTime>): StringTemplate {
|
private fun getFormattedDate(dateTimePath: DateTimePath<LocalDateTime>): StringTemplate {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package kr.co.vividnext.sodalive.admin.statistics.member
|
package kr.co.vividnext.sodalive.admin.statistics.member
|
||||||
|
|
||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
|
import org.springframework.data.domain.Pageable
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.LocalTime
|
import java.time.LocalTime
|
||||||
|
@ -13,14 +14,13 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics
|
||||||
fun getStatistics(
|
fun getStatistics(
|
||||||
startDateStr: String,
|
startDateStr: String,
|
||||||
endDateStr: String,
|
endDateStr: String,
|
||||||
offset: Long,
|
pageable: Pageable
|
||||||
limit: Long
|
|
||||||
): GetMemberStatisticsResponse {
|
): GetMemberStatisticsResponse {
|
||||||
val dateRange = getPagedDateRange(
|
val dateRange = getPagedDateRange(
|
||||||
startDate = startDateStr,
|
startDate = startDateStr,
|
||||||
endDate = endDateStr,
|
endDate = endDateStr,
|
||||||
page = (offset + 1).toInt(),
|
page = pageable.pageNumber + 1,
|
||||||
pageSize = limit.toInt()
|
pageSize = pageable.pageSize
|
||||||
)
|
)
|
||||||
|
|
||||||
if (dateRange == null) {
|
if (dateRange == null) {
|
||||||
|
@ -39,19 +39,29 @@ class AdminMemberStatisticsService(private val repository: AdminMemberStatistics
|
||||||
|
|
||||||
val totalSignUpCount = repository.getTotalSignUpCount(startDate = startDate, endDate = endDate)
|
val totalSignUpCount = repository.getTotalSignUpCount(startDate = startDate, endDate = endDate)
|
||||||
val totalSignOutCount = repository.getTotalSignOutCount(startDate = startDate, endDate = endDate)
|
val totalSignOutCount = repository.getTotalSignOutCount(startDate = startDate, endDate = endDate)
|
||||||
|
val totalPaymentMemberCount = repository.getPaymentMemberCount(startDate = startDate, endDate = endDate)
|
||||||
|
|
||||||
val signUpCountInRange = repository.getSignUpCountInRange(startDate = startDate, endDate = endDate)
|
val signUpCountInRange = repository.getSignUpCountInRange(
|
||||||
.associateBy({ it.date }, { it.memberCount })
|
startDate = startDate,
|
||||||
|
endDate = endDate,
|
||||||
|
offset = pageable.offset,
|
||||||
|
limit = pageable.pageSize.toLong()
|
||||||
|
).associateBy({ it.date }, { it.memberCount })
|
||||||
|
|
||||||
val signOutCountInRange = repository.getSignOutCountInRange(startDate = startDate, endDate = endDate)
|
val signOutCountInRange = repository.getSignOutCountInRange(
|
||||||
.associateBy({ it.date }, { it.memberCount })
|
startDate = startDate,
|
||||||
|
endDate = endDate,
|
||||||
|
offset = pageable.offset,
|
||||||
|
limit = pageable.pageSize.toLong()
|
||||||
|
).associateBy({ it.date }, { it.memberCount })
|
||||||
|
|
||||||
val paymentMemberCountInRange = repository.getPaymentMemberCountInRange(
|
val paymentMemberCountInRange = repository.getPaymentMemberCountInRange(
|
||||||
startDate = startDate,
|
startDate = startDate,
|
||||||
endDate = endDate
|
endDate = endDate,
|
||||||
|
offset = pageable.offset,
|
||||||
|
limit = pageable.pageSize.toLong()
|
||||||
)
|
)
|
||||||
|
|
||||||
val totalPaymentMemberCount = paymentMemberCountInRange.sumOf { it.memberCount }
|
|
||||||
val paymentMemberCountInRangeMap = paymentMemberCountInRange.associateBy({ it.date }, { it.memberCount })
|
val paymentMemberCountInRangeMap = paymentMemberCountInRange.associateBy({ it.date }, { it.memberCount })
|
||||||
|
|
||||||
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
|
||||||
|
|
Loading…
Reference in New Issue