From 472b51dd85a2c21aa4c7e839afecbb59a9a3615c Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 10 Nov 2023 00:55:22 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EC=A0=95=EC=82=B0=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculate/AdminCalculateController.kt | 15 +++++ .../AdminCalculateQueryRepository.kt | 65 +++++++++++++++---- .../admin/calculate/AdminCalculateService.kt | 61 +++++++++++++++++ .../calculate/GetCalculateContentQueryData.kt | 23 +++++++ .../calculate/GetCalculateContentResponse.kt | 30 +++++++++ 5 files changed, 183 insertions(+), 11 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentQueryData.kt create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt index ad38af1..fe5ecde 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.admin.calculate import kr.co.vividnext.sodalive.common.ApiResponse +import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping @@ -16,4 +17,18 @@ class AdminCalculateController(private val service: AdminCalculateService) { @RequestParam startDateStr: String, @RequestParam endDateStr: String ) = ApiResponse.ok(service.getCalculateLive(startDateStr, endDateStr)) + + @GetMapping("/content-list") + fun getCalculateContentList( + @RequestParam startDateStr: String, + @RequestParam endDateStr: String, + pageable: Pageable + ) = ApiResponse.ok( + service.getCalculateContentList( + startDateStr, + endDateStr, + pageable.offset, + pageable.pageSize.toLong() + ) + ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt index 7ed389c..b45bef7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt @@ -1,10 +1,14 @@ package kr.co.vividnext.sodalive.admin.calculate +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.can.use.QUseCan.useCan import kr.co.vividnext.sodalive.can.use.QUseCanCalculate.useCanCalculate import kr.co.vividnext.sodalive.can.use.UseCanCalculateStatus +import kr.co.vividnext.sodalive.content.QAudioContent.audioContent +import kr.co.vividnext.sodalive.content.order.QOrder.order import kr.co.vividnext.sodalive.live.room.QLiveRoom.liveRoom import kr.co.vividnext.sodalive.member.QMember.member import org.springframework.stereotype.Repository @@ -13,17 +17,7 @@ import java.time.LocalDateTime @Repository class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { fun getCalculateLive(startDate: LocalDateTime, endDate: LocalDateTime): List { - val formattedDate = Expressions.stringTemplate( - "DATE_FORMAT({0}, {1})", - Expressions.dateTimeTemplate( - LocalDateTime::class.java, - "CONVERT_TZ({0},{1},{2})", - liveRoom.beginDateTime, - "UTC", - "Asia/Seoul" - ), - "%Y-%m-%d" - ) + val formattedDate = getFormattedDate(liveRoom.beginDateTime) return queryFactory .select( @@ -51,4 +45,53 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .orderBy(member.nickname.desc(), formattedDate.desc()) .fetch() } + + fun getCalculateContentList( + startDate: LocalDateTime, + endDate: LocalDateTime, + offset: Long, + limit: Long + ): List { + val orderFormattedDate = getFormattedDate(order.createdAt) + return queryFactory + .select( + QGetCalculateContentQueryData( + member.nickname, + audioContent.title, + getFormattedDate(audioContent.createdAt), + orderFormattedDate, + order.type, + order.can, + order.id.count(), + order.can.sum() + ) + ) + .from(useCanCalculate) + .innerJoin(useCanCalculate.useCan, useCan) + .innerJoin(useCan.order, order) + .innerJoin(order.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .where( + useCanCalculate.status.eq(UseCanCalculateStatus.RECEIVED) + .and(order.createdAt.goe(startDate)) + .and(order.createdAt.loe(endDate)) + ) + .groupBy(audioContent.id, order.type) + .orderBy(member.id.desc(), orderFormattedDate.desc()) + .fetch() + } + + private fun getFormattedDate(dateTimePath: DateTimePath): StringTemplate { + return Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})", + Expressions.dateTimeTemplate( + LocalDateTime::class.java, + "CONVERT_TZ({0},{1},{2})", + dateTimePath, + "UTC", + "Asia/Seoul" + ), + "%Y-%m-%d" + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt index 5434e50..003104e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt @@ -1,6 +1,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 org.springframework.stereotype.Service import java.time.LocalDate import java.time.ZoneId @@ -70,4 +71,64 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor } .toList() } + + fun getCalculateContentList( + startDateStr: String, + endDateStr: String, + offset: Long, + limit: Long + ): List { + 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 + .getCalculateContentList(startDate, endDate, offset, limit) + .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() + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentQueryData.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentQueryData.kt new file mode 100644 index 0000000..39ca14e --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentQueryData.kt @@ -0,0 +1,23 @@ +package kr.co.vividnext.sodalive.admin.calculate + +import com.querydsl.core.annotations.QueryProjection +import kr.co.vividnext.sodalive.content.order.OrderType + +data class GetCalculateContentQueryData @QueryProjection constructor( + // 등록 크리에이터 닉네임 + val nickname: String, + // 콘텐츠 제목 + val title: String, + // 콘텐츠 등록 날짜 + val registrationDate: String, + // 콘텐츠 판매 날짜 + val saleDate: String, + // 대여/소장 구분 + val orderType: OrderType, + // 판매 금액(캔) + val orderPrice: Int, + // 인원 + val numberOfPeople: Long, + // 합계 + val totalCan: Int +) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt new file mode 100644 index 0000000..60381dc --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt @@ -0,0 +1,30 @@ +package kr.co.vividnext.sodalive.admin.calculate + +data class GetCalculateContentResponse( + // 등록 크리에이터 닉네임 + val nickname: String, + // 콘텐츠 제목 + val title: String, + // 콘텐츠 등록 날짜 + val registrationDate: String, + // 콘텐츠 판매 날짜 + val saleDate: String, + // 대여/소장 구분 + val orderType: String, + // 판매 금액(캔) + val orderPrice: Int, + // 인원 + val numberOfPeople: Int, + // 합계 + val totalCan: Int, + // 원화 + val totalKrw: Int, + // 수수료 + val paymentFee: Int, + // 정산금액 + val settlementAmount: Int, + // 원천세(세금 3.3%) + val tax: Int, + // 입금액 + val depositAmount: Int +) From c590eff4601b6f8fd8f710e52d56590d4f86e6bc Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 10 Nov 2023 17:20:11 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EC=A0=95=EC=82=B0=20API=20-=20=EC=B4=9D?= =?UTF-8?q?=20=EA=B0=9C=EC=88=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculate/AdminCalculateQueryRepository.kt | 18 ++++++++++++++++++ .../admin/calculate/AdminCalculateService.kt | 13 ++++++++++--- .../calculate/GetCalculateContentResponse.kt | 5 +++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt index b45bef7..a8d44c8 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt @@ -46,6 +46,24 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .fetch() } + fun getCalculateContentTotalCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { + return queryFactory + .select(audioContent.id) + .from(useCanCalculate) + .innerJoin(useCanCalculate.useCan, useCan) + .innerJoin(useCan.order, order) + .innerJoin(order.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .where( + useCanCalculate.status.eq(UseCanCalculateStatus.RECEIVED) + .and(order.createdAt.goe(startDate)) + .and(order.createdAt.loe(endDate)) + ) + .groupBy(audioContent.id, order.type) + .fetch() + .size + } + fun getCalculateContentList( startDate: LocalDateTime, endDate: LocalDateTime, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt index 003104e..ff17452 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt @@ -77,7 +77,7 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor endDateStr: String, offset: Long, limit: Long - ): List { + ): GetCalculateContentResponse { val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0) .atZone(ZoneId.of("Asia/Seoul")) @@ -89,7 +89,9 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() - return repository + val totalCount = repository.getCalculateContentTotalCount(startDate, endDate) + + val items = repository .getCalculateContentList(startDate, endDate, offset, limit) .map { val orderTypeStr = if (it.orderType == OrderType.RENTAL) { @@ -113,7 +115,7 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor // 입금액 val depositAmount = settlementAmount - tax - GetCalculateContentResponse( + GetCalculateContentItemResponse( nickname = it.nickname, title = it.title, registrationDate = it.registrationDate, @@ -130,5 +132,10 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor ) } .toList() + + return GetCalculateContentResponse( + totalCount = totalCount, + items = items + ) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt index 60381dc..e7c0423 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt @@ -1,6 +1,11 @@ package kr.co.vividnext.sodalive.admin.calculate data class GetCalculateContentResponse( + val totalCount: Int, + val items: List +) + +data class GetCalculateContentItemResponse( // 등록 크리에이터 닉네임 val nickname: String, // 콘텐츠 제목 From 31208b5e9908a82949b333d4f3fa4a43eb940777 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 10 Nov 2023 19:15:29 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EC=A0=95=EC=82=B0=20API=20-=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=95=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calculate/AdminCalculateController.kt | 13 ++-------- .../AdminCalculateQueryRepository.kt | 25 +------------------ .../admin/calculate/AdminCalculateService.kt | 20 +++------------ .../calculate/GetCalculateContentResponse.kt | 5 ---- 4 files changed, 7 insertions(+), 56 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt index fe5ecde..ef892f3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateController.kt @@ -1,7 +1,6 @@ package kr.co.vividnext.sodalive.admin.calculate import kr.co.vividnext.sodalive.common.ApiResponse -import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping @@ -21,14 +20,6 @@ class AdminCalculateController(private val service: AdminCalculateService) { @GetMapping("/content-list") fun getCalculateContentList( @RequestParam startDateStr: String, - @RequestParam endDateStr: String, - pageable: Pageable - ) = ApiResponse.ok( - service.getCalculateContentList( - startDateStr, - endDateStr, - pageable.offset, - pageable.pageSize.toLong() - ) - ) + @RequestParam endDateStr: String + ) = ApiResponse.ok(service.getCalculateContentList(startDateStr, endDateStr)) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt index a8d44c8..623061b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt @@ -46,30 +46,7 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .fetch() } - fun getCalculateContentTotalCount(startDate: LocalDateTime, endDate: LocalDateTime): Int { - return queryFactory - .select(audioContent.id) - .from(useCanCalculate) - .innerJoin(useCanCalculate.useCan, useCan) - .innerJoin(useCan.order, order) - .innerJoin(order.audioContent, audioContent) - .innerJoin(audioContent.member, member) - .where( - useCanCalculate.status.eq(UseCanCalculateStatus.RECEIVED) - .and(order.createdAt.goe(startDate)) - .and(order.createdAt.loe(endDate)) - ) - .groupBy(audioContent.id, order.type) - .fetch() - .size - } - - fun getCalculateContentList( - startDate: LocalDateTime, - endDate: LocalDateTime, - offset: Long, - limit: Long - ): List { + fun getCalculateContentList(startDate: LocalDateTime, endDate: LocalDateTime): List { val orderFormattedDate = getFormattedDate(order.createdAt) return queryFactory .select( diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt index ff17452..fdaa535 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateService.kt @@ -72,12 +72,7 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor .toList() } - fun getCalculateContentList( - startDateStr: String, - endDateStr: String, - offset: Long, - limit: Long - ): GetCalculateContentResponse { + fun getCalculateContentList(startDateStr: String, endDateStr: String): List { val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0) .atZone(ZoneId.of("Asia/Seoul")) @@ -89,10 +84,8 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() - val totalCount = repository.getCalculateContentTotalCount(startDate, endDate) - - val items = repository - .getCalculateContentList(startDate, endDate, offset, limit) + return repository + .getCalculateContentList(startDate, endDate) .map { val orderTypeStr = if (it.orderType == OrderType.RENTAL) { "대여" @@ -115,7 +108,7 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor // 입금액 val depositAmount = settlementAmount - tax - GetCalculateContentItemResponse( + GetCalculateContentResponse( nickname = it.nickname, title = it.title, registrationDate = it.registrationDate, @@ -132,10 +125,5 @@ class AdminCalculateService(private val repository: AdminCalculateQueryRepositor ) } .toList() - - return GetCalculateContentResponse( - totalCount = totalCount, - items = items - ) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt index e7c0423..60381dc 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/GetCalculateContentResponse.kt @@ -1,11 +1,6 @@ package kr.co.vividnext.sodalive.admin.calculate data class GetCalculateContentResponse( - val totalCount: Int, - val items: List -) - -data class GetCalculateContentItemResponse( // 등록 크리에이터 닉네임 val nickname: String, // 콘텐츠 제목 From fc17ba9aaa6f9a86272fa07f2ecd110d6aec1d61 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 10 Nov 2023 19:35:33 +0900 Subject: [PATCH 4/4] =?UTF-8?q?sql=5Fmode=3Donly=5Ffull=5Fgroup=5Fby=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=BF=BC=EB=A6=AC=EB=A5=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=98=EC=97=AC=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/admin/calculate/AdminCalculateQueryRepository.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt index 623061b..d6aa125 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/calculate/AdminCalculateQueryRepository.kt @@ -71,7 +71,7 @@ class AdminCalculateQueryRepository(private val queryFactory: JPAQueryFactory) { .and(order.createdAt.goe(startDate)) .and(order.createdAt.loe(endDate)) ) - .groupBy(audioContent.id, order.type) + .groupBy(audioContent.id, order.type, order.createdAt, order.can) .orderBy(member.id.desc(), orderFormattedDate.desc()) .fetch() }