관리자

- 커뮤니티 게시물 정산 API 추가
This commit is contained in:
Klaus 2024-05-28 17:51:48 +09:00
parent a7db9bed44
commit 0040a52169
4 changed files with 97 additions and 0 deletions

View File

@ -34,4 +34,18 @@ class AdminCalculateController(private val service: AdminCalculateService) {
@RequestParam startDateStr: String,
@RequestParam endDateStr: String
) = ApiResponse.ok(service.getCalculateContentDonationList(startDateStr, endDateStr))
@GetMapping("/community-post")
fun getCalculateCommunityPost(
@RequestParam startDateStr: String,
@RequestParam endDateStr: String,
pageable: Pageable
) = ApiResponse.ok(
service.getCalculateCommunityPost(
startDateStr,
endDateStr,
pageable.offset,
pageable.pageSize.toLong()
)
)
}

View File

@ -8,6 +8,7 @@ import kr.co.vividnext.sodalive.can.use.CanUsage
import kr.co.vividnext.sodalive.can.use.QUseCan.useCan
import kr.co.vividnext.sodalive.content.QAudioContent.audioContent
import kr.co.vividnext.sodalive.content.order.QOrder.order
import kr.co.vividnext.sodalive.explorer.profile.creatorCommunity.QCreatorCommunity.creatorCommunity
import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom
import kr.co.vividnext.sodalive.member.QMember.member
import org.springframework.stereotype.Repository
@ -152,4 +153,35 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) {
.orderBy(member.id.asc(), donationFormattedDate.desc())
.fetch()
}
fun getCalculateCommunityPostList(
startDate: LocalDateTime?,
endDate: LocalDateTime?,
offset: Long,
limit: Long
): List<GetCalculateCommunityPostQueryData> {
val formattedDate = getFormattedDate(useCan.createdAt)
return queryFactory
.select(
QGetCalculateCommunityPostQueryData(
member.nickname,
Expressions.stringTemplate("substring({0}, 1, 10)", creatorCommunity.content),
formattedDate,
useCan.id.count(),
useCan.can.add(useCan.rewardCan).sum()
)
)
.from(useCan)
.innerJoin(useCan.communityPost, creatorCommunity)
.innerJoin(creatorCommunity.member, member)
.where(
useCan.isRefund.isFalse
.and(useCan.canUsage.eq(CanUsage.PAID_COMMUNITY_POST))
.and(useCan.createdAt.goe(startDate))
.and(useCan.createdAt.loe(endDate))
)
.groupBy(formattedDate, creatorCommunity.id)
.orderBy(member.id.asc(), formattedDate.desc())
.fetch()
}
}

View File

@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.admin.calculate
import kr.co.vividnext.sodalive.can.use.CanUsage
import kr.co.vividnext.sodalive.content.order.OrderType
import kr.co.vividnext.sodalive.extensions.convertLocalDateTime
import org.springframework.cache.annotation.Cacheable
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
@ -266,4 +267,37 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor
}
.toList()
}
fun getCalculateCommunityPost(
startDateStr: String,
endDateStr: String,
offset: Long,
limit: Long
): List<GetCalculateCommunityPostResponse> {
val startDate = startDateStr.convertLocalDateTime()
val endDate = endDateStr.convertLocalDateTime(hour = 23, minute = 59, second = 59)
return repository
.getCalculateCommunityPostList(startDate, endDate, offset, limit)
.map {
val totalKrw = it.totalCan * 100
val paymentFee = totalKrw * 0.066f
val settlementAmount = (totalKrw.toFloat() - paymentFee) * 0.7
val tax = settlementAmount * 0.033
val depositAmount = settlementAmount - tax
GetCalculateCommunityPostResponse(
nickname = it.nickname,
title = it.title,
date = it.date,
numberOfPurchase = it.numberOfPurchase.toInt(),
totalCan = it.totalCan,
totalKrw = totalKrw,
paymentFee = paymentFee.roundToInt(),
settlementAmount = settlementAmount.roundToInt(),
tax = tax.roundToInt(),
depositAmount = depositAmount.roundToInt()
)
}
}
}

View File

@ -1,9 +1,26 @@
package kr.co.vividnext.sodalive.extensions
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
fun String.convertLocalDateTime(format: String): LocalDateTime {
val dateTimeFormatter = DateTimeFormatter.ofPattern(format)
return LocalDateTime.parse(this, dateTimeFormatter)
}
fun String.convertLocalDateTime(
format: String = "yyyy-MM-dd",
currentTimeZoneStr: String = "ASIA/Seoul",
hour: Int = 0,
minute: Int = 0,
second: Int = 0
): LocalDateTime {
val dateTimeFormatter = DateTimeFormatter.ofPattern(format)
return LocalDate.parse(this, dateTimeFormatter)
.atTime(hour, minute, second)
.atZone(ZoneId.of(currentTimeZoneStr))
.withZoneSameInstant(ZoneId.of("UTC"))
.toLocalDateTime()
}