From 3a403e51920dc9bdd199f5f62ccd2424efb17d6a Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 3 Apr 2024 15:42:18 +0900 Subject: [PATCH] . --- .../calculate/CreatorAdminCalculateService.kt | 256 +++++++++--------- 1 file changed, 131 insertions(+), 125 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateService.kt index c83eafa..f6c0330 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateService.kt @@ -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 { - 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)