From 21bf0910c5b1ddeef2f7480e60ead05a0a03104a Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 27 May 2024 15:25:50 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BB=A4?= =?UTF-8?q?=EB=AE=A4=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EC=A0=95=EC=82=B0=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetCalculateCommunityPostQueryData.kt | 11 ++++ .../GetCalculateCommunityPostResponse.kt | 16 ++++++ .../CreatorAdminCalculateController.kt | 20 +++++++ .../CreatorAdminCalculateQueryRepository.kt | 55 +++++++++++++++++++ .../calculate/CreatorAdminCalculateService.kt | 46 ++++++++++++++++ ...etCreatorCalculateCommunityPostResponse.kt | 9 +++ 6 files changed, 157 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostQueryData.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostResponse.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/GetCreatorCalculateCommunityPostResponse.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostQueryData.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostQueryData.kt new file mode 100644 index 0000000..bfe0535 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostQueryData.kt @@ -0,0 +1,11 @@ +package kr.co.vividnext.sodalive.admin.calculate + +import com.querydsl.core.annotations.QueryProjection + +data class GetCalculateCommunityPostQueryData @QueryProjection constructor( + val nickname: String, + val title: String, + val date: String, + val numberOfPurchase: Long, + val totalCan: Int +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostResponse.kt new file mode 100644 index 0000000..d2adac5 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateCommunityPostResponse.kt @@ -0,0 +1,16 @@ +package kr.co.vividnext.sodalive.admin.calculate + +import com.fasterxml.jackson.annotation.JsonProperty + +data class GetCalculateCommunityPostResponse( + @JsonProperty("nickname") val nickname: String, + @JsonProperty("title") val title: String, + @JsonProperty("date") val date: String, + @JsonProperty("numberOfPurchase") val numberOfPurchase: Int, + @JsonProperty("totalCan") val totalCan: Int, + @JsonProperty("totalKrw") val totalKrw: Int, + @JsonProperty("paymentFee") val paymentFee: Int, + @JsonProperty("settlementAmount") val settlementAmount: Int, + @JsonProperty("tax") val tax: Int, + @JsonProperty("depositAmount") val depositAmount: Int +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateController.kt index 50235ff..e5f78f6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateController.kt @@ -72,4 +72,24 @@ class CreatorAdminCalculateController(private val service: CreatorAdminCalculate ) ) } + + @GetMapping("/community-post") + fun getCalculateCommunityPost( + @RequestParam startDateStr: String, + @RequestParam endDateStr: String, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, + pageable: Pageable + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok( + service.getCalculateCommunityPost( + startDateStr, + endDateStr, + member.id!!, + pageable.offset, + pageable.pageSize.toLong() + ) + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt index a6d49df..650d160 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt @@ -4,10 +4,12 @@ import com.querydsl.core.types.dsl.DateTimePath import com.querydsl.core.types.dsl.Expressions import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.admin.calculate.GetCalculateCommunityPostQueryData import kr.co.vividnext.sodalive.admin.calculate.GetCalculateContentDonationQueryData import kr.co.vividnext.sodalive.admin.calculate.GetCalculateContentQueryData import kr.co.vividnext.sodalive.admin.calculate.GetCalculateLiveQueryData import kr.co.vividnext.sodalive.admin.calculate.GetCumulativeSalesByContentQueryData +import kr.co.vividnext.sodalive.admin.calculate.QGetCalculateCommunityPostQueryData import kr.co.vividnext.sodalive.admin.calculate.QGetCalculateContentDonationQueryData import kr.co.vividnext.sodalive.admin.calculate.QGetCalculateContentQueryData import kr.co.vividnext.sodalive.admin.calculate.QGetCalculateLiveQueryData @@ -16,6 +18,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 @@ -246,4 +249,56 @@ class CreatorAdminCalculateQueryRepository(private val queryFactory: JPAQueryFac .orderBy(member.id.asc(), donationFormattedDate.desc()) .fetch() } + + fun getCalculateCommunityPostTotalCount(startDate: LocalDateTime?, endDate: LocalDateTime?, memberId: Long): Int { + val formattedDate = getFormattedDate(useCan.createdAt) + return queryFactory + .select(creatorCommunity.id) + .from(useCan) + .innerJoin(useCan.communityPost, creatorCommunity) + .innerJoin(creatorCommunity.member, member) + .where( + useCan.isRefund.isFalse + .and(useCan.canUsage.eq(CanUsage.DONATION)) + .and(useCan.createdAt.goe(startDate)) + .and(useCan.createdAt.loe(endDate)) + .and(creatorCommunity.member.id.eq(memberId)) + ) + .groupBy(formattedDate, creatorCommunity.id) + .fetch() + .size + } + + fun getCalculateCommunityPostList( + startDate: LocalDateTime?, + endDate: LocalDateTime?, + memberId: Long, + offset: Long, + limit: Long + ): List { + 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.DONATION)) + .and(useCan.createdAt.goe(startDate)) + .and(useCan.createdAt.loe(endDate)) + .and(creatorCommunity.member.id.eq(memberId)) + ) + .groupBy(formattedDate, creatorCommunity.id) + .orderBy(member.id.asc(), formattedDate.desc()) + .fetch() + } } 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 f6c0330..cb5f11b 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 @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.creator.admin.calculate import kr.co.vividnext.sodalive.admin.calculate.CumulativeSalesByContentItem +import kr.co.vividnext.sodalive.admin.calculate.GetCalculateCommunityPostResponse import kr.co.vividnext.sodalive.admin.calculate.GetCalculateContentDonationResponse import kr.co.vividnext.sodalive.admin.calculate.GetCalculateContentResponse import kr.co.vividnext.sodalive.admin.calculate.GetCalculateLiveResponse @@ -288,4 +289,49 @@ class CreatorAdminCalculateService(private val repository: CreatorAdminCalculate return GetCreatorCalculateContentDonationResponse(totalCount, items) } + + fun getCalculateCommunityPost( + startDateStr: String, + endDateStr: String, + memberId: Long, + offset: Long, + limit: Long + ): GetCreatorCalculateCommunityPostResponse { + 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.getCalculateCommunityPostTotalCount(startDate, endDate, memberId) + val items = repository + .getCalculateCommunityPostList(startDate, endDate, memberId, 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() + ) + } + + return GetCreatorCalculateCommunityPostResponse(totalCount, items) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/GetCreatorCalculateCommunityPostResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/GetCreatorCalculateCommunityPostResponse.kt new file mode 100644 index 0000000..9c6169f --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/GetCreatorCalculateCommunityPostResponse.kt @@ -0,0 +1,9 @@ +package kr.co.vividnext.sodalive.creator.admin.calculate + +import com.fasterxml.jackson.annotation.JsonProperty +import kr.co.vividnext.sodalive.admin.calculate.GetCalculateCommunityPostResponse + +data class GetCreatorCalculateCommunityPostResponse( + @JsonProperty("totalCount") val totalCount: Int, + @JsonProperty("items") val items: List +) -- 2.40.1 From a7db9bed4415d898cc01883129ed6742273227d8 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 27 May 2024 15:39:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BB=A4?= =?UTF-8?q?=EB=AE=A4=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EB=AC=BC=20?= =?UTF-8?q?=EC=A0=95=EC=82=B0=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/calculate/CreatorAdminCalculateQueryRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt index 650d160..a6e2585 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/calculate/CreatorAdminCalculateQueryRepository.kt @@ -259,7 +259,7 @@ class CreatorAdminCalculateQueryRepository(private val queryFactory: JPAQueryFac .innerJoin(creatorCommunity.member, member) .where( useCan.isRefund.isFalse - .and(useCan.canUsage.eq(CanUsage.DONATION)) + .and(useCan.canUsage.eq(CanUsage.PAID_COMMUNITY_POST)) .and(useCan.createdAt.goe(startDate)) .and(useCan.createdAt.loe(endDate)) .and(creatorCommunity.member.id.eq(memberId)) @@ -292,7 +292,7 @@ class CreatorAdminCalculateQueryRepository(private val queryFactory: JPAQueryFac .innerJoin(creatorCommunity.member, member) .where( useCan.isRefund.isFalse - .and(useCan.canUsage.eq(CanUsage.DONATION)) + .and(useCan.canUsage.eq(CanUsage.PAID_COMMUNITY_POST)) .and(useCan.createdAt.goe(startDate)) .and(useCan.createdAt.loe(endDate)) .and(creatorCommunity.member.id.eq(memberId)) -- 2.40.1