. #160

Merged
klaus merged 1 commits from test into main 2024-04-03 06:49:36 +00:00
1 changed files with 131 additions and 125 deletions

View File

@ -2,9 +2,10 @@ package kr.co.vividnext.sodalive.creator.admin.calculate
import kr.co.vividnext.sodalive.admin.calculate.CumulativeSalesByContentItem
import kr.co.vividnext.sodalive.admin.calculate.GetCalculateContentDonationResponse
import kr.co.vividnext.sodalive.admin.calculate.GetCalculateContentResponse
import kr.co.vividnext.sodalive.admin.calculate.GetCalculateLiveResponse
import kr.co.vividnext.sodalive.admin.calculate.GetCumulativeSalesByContentResponse
import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.can.use.CanUsage
import kr.co.vividnext.sodalive.content.order.OrderType
import kr.co.vividnext.sodalive.member.Member
import org.springframework.cache.annotation.Cacheable
@ -18,80 +19,86 @@ import kotlin.math.roundToInt
@Service
class CreatorAdminCalculateService(private val repository: CreatorAdminCalculateQueryRepository) {
@Transactional(readOnly = true)
@Cacheable(
cacheNames = ["default"],
key = "'creatorCalculateLive:v20240403_01:' + " + "#member + ':' + #startDateStr + ':' + #endDateStr"
)
fun getCalculateLive(startDateStr: String, endDateStr: String, member: Member): List<GetCalculateLiveResponse> {
throw SodaException("점검중입니다.")
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0)
.atZone(ZoneId.of("Asia/Seoul"))
.withZoneSameInstant(ZoneId.of("UTC"))
.toLocalDateTime()
// val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
// val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0)
// .atZone(ZoneId.of("Asia/Seoul"))
// .withZoneSameInstant(ZoneId.of("UTC"))
// .toLocalDateTime()
//
// val endDate = LocalDate.parse(endDateStr, dateTimeFormatter).atTime(23, 59, 59)
// .atZone(ZoneId.of("Asia/Seoul"))
// .withZoneSameInstant(ZoneId.of("UTC"))
// .toLocalDateTime()
//
// return repository
// .getCalculateLive(startDate, endDate, member.id!!)
// .asSequence()
// .map {
// val canUsageStr = when (it.canUsage) {
// CanUsage.LIVE -> {
// "유료"
// }
//
// CanUsage.SPIN_ROULETTE -> {
// "룰렛"
// }
//
// else -> {
// "후원"
// }
// }
//
// val numberOfPeople = if (it.canUsage == CanUsage.LIVE) {
// it.memberCount.toInt()
// } else {
// 0
// }
//
// // 원화 = totalCoin * 100 ( 캔 1개 = 100원 )
// val totalKrw = it.totalAmount * 100
//
// // 결제수수료 : 6.6%
// val paymentFee = totalKrw * 0.066f
//
// // 정산금액 = (원화 - 결제수수료) 의 70%
// val settlementAmount = (totalKrw.toFloat() - paymentFee) * 0.7
//
// // 원천세 = 정산금액의 3.3%
// val tax = settlementAmount * 0.033
//
// // 입금액
// val depositAmount = settlementAmount - tax
//
// GetCalculateLiveResponse(
// email = it.email,
// nickname = it.nickname,
// date = it.date,
// title = it.title,
// entranceFee = it.entranceFee,
// canUsageStr = canUsageStr,
// numberOfPeople = numberOfPeople,
// totalAmount = it.totalAmount,
// totalKrw = totalKrw,
// paymentFee = paymentFee.roundToInt(),
// settlementAmount = settlementAmount.roundToInt(),
// tax = tax.roundToInt(),
// depositAmount = depositAmount.roundToInt()
// )
// }
// .toList()
return listOf()
val endDate = LocalDate.parse(endDateStr, dateTimeFormatter).atTime(23, 59, 59)
.atZone(ZoneId.of("Asia/Seoul"))
.withZoneSameInstant(ZoneId.of("UTC"))
.toLocalDateTime()
return repository
.getCalculateLive(startDate, endDate, member.id!!)
.asSequence()
.map {
val canUsageStr = when (it.canUsage) {
CanUsage.LIVE -> {
"유료"
}
CanUsage.SPIN_ROULETTE -> {
"룰렛"
}
else -> {
"후원"
}
}
val numberOfPeople = if (it.canUsage == CanUsage.LIVE) {
it.memberCount.toInt()
} else {
0
}
// 원화 = totalCoin * 100 ( 캔 1개 = 100원 )
val totalKrw = it.totalAmount * 100
// 결제수수료 : 6.6%
val paymentFee = totalKrw * 0.066f
// 정산금액 = (원화 - 결제수수료) 의 70%
val settlementAmount = (totalKrw.toFloat() - paymentFee) * 0.7
// 원천세 = 정산금액의 3.3%
val tax = settlementAmount * 0.033
// 입금액
val depositAmount = settlementAmount - tax
GetCalculateLiveResponse(
email = it.email,
nickname = it.nickname,
date = it.date,
title = it.title,
entranceFee = it.entranceFee,
canUsageStr = canUsageStr,
numberOfPeople = numberOfPeople,
totalAmount = it.totalAmount,
totalKrw = totalKrw,
paymentFee = paymentFee.roundToInt(),
settlementAmount = settlementAmount.roundToInt(),
tax = tax.roundToInt(),
depositAmount = depositAmount.roundToInt()
)
}
.toList()
}
@Transactional(readOnly = true)
@Cacheable(
cacheNames = ["cache_ttl_3_hours"],
key = "'creatorCalculateContentList:v20240403_01:' + " +
"#startDateStr + ':' + #endDateStr + ':' + #memberId + ':' + #offset + ':' + #limit"
)
fun getCalculateContentList(
startDateStr: String,
endDateStr: String,
@ -99,62 +106,61 @@ class CreatorAdminCalculateService(private val repository: CreatorAdminCalculate
offset: Long,
limit: Long
): GetCalculateContentListResponse {
throw SodaException("점검중입니다.")
// val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
// val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0)
// .atZone(ZoneId.of("Asia/Seoul"))
// .withZoneSameInstant(ZoneId.of("UTC"))
// .toLocalDateTime()
//
// val endDate = LocalDate.parse(endDateStr, dateTimeFormatter).atTime(23, 59, 59)
// .atZone(ZoneId.of("Asia/Seoul"))
// .withZoneSameInstant(ZoneId.of("UTC"))
// .toLocalDateTime()
//
// val totalCount = repository.getCalculateContentListTotalCount(startDate, endDate, memberId)
// val items = repository.getCalculateContentList(startDate, endDate, memberId, offset, limit)
// .asSequence()
// .map {
// val orderTypeStr = if (it.orderType == OrderType.RENTAL) {
// "대여"
// } else {
// "소장"
// }
//
// // 원화 = totalCoin * 100 ( 캔 1개 = 100원 )
// val totalKrw = it.totalCan * 100
//
// // 결제수수료 : 6.6%
// val paymentFee = totalKrw * 0.066f
//
// // 정산금액 = (원화 - 결제수수료) 의 70%
// val settlementAmount = (totalKrw.toFloat() - paymentFee) * 0.7
//
// // 원천세 = 정산금액의 3.3%
// val tax = settlementAmount * 0.033
//
// // 입금액
// val depositAmount = settlementAmount - tax
//
// GetCalculateContentResponse(
// nickname = it.nickname,
// title = it.title,
// registrationDate = it.registrationDate,
// saleDate = it.saleDate,
// orderType = orderTypeStr,
// orderPrice = it.orderPrice,
// numberOfPeople = it.numberOfPeople.toInt(),
// totalCan = it.totalCan,
// totalKrw = totalKrw,
// paymentFee = paymentFee.roundToInt(),
// settlementAmount = settlementAmount.roundToInt(),
// tax = tax.roundToInt(),
// depositAmount = depositAmount.roundToInt()
// )
// }
// .toList()
val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd")
val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0)
.atZone(ZoneId.of("Asia/Seoul"))
.withZoneSameInstant(ZoneId.of("UTC"))
.toLocalDateTime()
return GetCalculateContentListResponse(0, listOf())
val endDate = LocalDate.parse(endDateStr, dateTimeFormatter).atTime(23, 59, 59)
.atZone(ZoneId.of("Asia/Seoul"))
.withZoneSameInstant(ZoneId.of("UTC"))
.toLocalDateTime()
val totalCount = repository.getCalculateContentListTotalCount(startDate, endDate, memberId)
val items = repository.getCalculateContentList(startDate, endDate, memberId, offset, limit)
.asSequence()
.map {
val orderTypeStr = if (it.orderType == OrderType.RENTAL) {
"대여"
} else {
"소장"
}
// 원화 = totalCoin * 100 ( 캔 1개 = 100원 )
val totalKrw = it.totalCan * 100
// 결제수수료 : 6.6%
val paymentFee = totalKrw * 0.066f
// 정산금액 = (원화 - 결제수수료) 의 70%
val settlementAmount = (totalKrw.toFloat() - paymentFee) * 0.7
// 원천세 = 정산금액의 3.3%
val tax = settlementAmount * 0.033
// 입금액
val depositAmount = settlementAmount - tax
GetCalculateContentResponse(
nickname = it.nickname,
title = it.title,
registrationDate = it.registrationDate,
saleDate = it.saleDate,
orderType = orderTypeStr,
orderPrice = it.orderPrice,
numberOfPeople = it.numberOfPeople.toInt(),
totalCan = it.totalCan,
totalKrw = totalKrw,
paymentFee = paymentFee.roundToInt(),
settlementAmount = settlementAmount.roundToInt(),
tax = tax.roundToInt(),
depositAmount = depositAmount.roundToInt()
)
}
.toList()
return GetCalculateContentListResponse(totalCount, items)
}
@Transactional(readOnly = true)