|
|
|
@ -2,10 +2,9 @@ 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.can.use.CanUsage
|
|
|
|
|
import kr.co.vividnext.sodalive.common.SodaException
|
|
|
|
|
import kr.co.vividnext.sodalive.content.order.OrderType
|
|
|
|
|
import kr.co.vividnext.sodalive.member.Member
|
|
|
|
|
import org.springframework.cache.annotation.Cacheable
|
|
|
|
@ -19,86 +18,80 @@ import kotlin.math.roundToInt
|
|
|
|
|
@Service
|
|
|
|
|
class CreatorAdminCalculateService(private val repository: CreatorAdminCalculateQueryRepository) {
|
|
|
|
|
@Transactional(readOnly = true)
|
|
|
|
|
@Cacheable(
|
|
|
|
|
cacheNames = ["default"],
|
|
|
|
|
key = "'creatorCalculateLive:' + " + "#member + ':' + #startDateStr + ':' + #endDateStr"
|
|
|
|
|
)
|
|
|
|
|
fun getCalculateLive(startDateStr: String, endDateStr: String, member: Member): List<GetCalculateLiveResponse> {
|
|
|
|
|
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()
|
|
|
|
|
throw SodaException("점검중입니다.")
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
// 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()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional(readOnly = true)
|
|
|
|
|
@Cacheable(
|
|
|
|
|
cacheNames = ["cache_ttl_3_hours"],
|
|
|
|
|
key = "'creatorCalculateContentList:' + " +
|
|
|
|
|
"#startDateStr + ':' + #endDateStr + ':' + #memberId + ':' + #offset + ':' + #limit"
|
|
|
|
|
)
|
|
|
|
|
fun getCalculateContentList(
|
|
|
|
|
startDateStr: String,
|
|
|
|
|
endDateStr: String,
|
|
|
|
@ -106,61 +99,62 @@ class CreatorAdminCalculateService(private val repository: CreatorAdminCalculate
|
|
|
|
|
offset: Long,
|
|
|
|
|
limit: Long
|
|
|
|
|
): GetCalculateContentListResponse {
|
|
|
|
|
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()
|
|
|
|
|
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 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)
|
|
|
|
|
return GetCalculateContentListResponse(0, listOf())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Transactional(readOnly = true)
|
|
|
|
|