From 778f0c3ba2a80eaab5efc67382ddd08d430a699e Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 11 Oct 2025 03:12:10 +0900 Subject: [PATCH] =?UTF-8?q?fix(admin/charge):=20=ED=86=B5=ED=99=94?= =?UTF-8?q?=EB=B3=84=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=EC=99=80=20=ED=95=A9?= =?UTF-8?q?=EA=B3=84=20=ED=96=89=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=ED=95=A9=EA=B3=84=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존 로직은 통화 구분 없이 전체 합계를 계산·표시하여 통화가 혼재된 데이터에서 오해의 소지가 있었음. - 관리 화면 요구사항: 통화(currency)별 합계를 명확히 제공. --- .../charge/AdminChargeStatusController.kt | 5 ++-- .../AdminChargeStatusQueryRepository.kt | 25 ++++++++++++------- .../admin/charge/AdminChargeStatusService.kt | 5 ++-- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusController.kt index be859be..7047d4f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusController.kt @@ -21,6 +21,7 @@ class AdminChargeStatusController(private val service: AdminChargeStatusService) @GetMapping("/detail") fun getChargeStatusDetail( @RequestParam startDateStr: String, - @RequestParam paymentGateway: PaymentGateway - ) = ApiResponse.ok(service.getChargeStatusDetail(startDateStr, paymentGateway)) + @RequestParam paymentGateway: PaymentGateway, + @RequestParam(value = "currency", required = false) currency: String? = null + ) = ApiResponse.ok(service.getChargeStatusDetail(startDateStr, paymentGateway, currency)) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusQueryRepository.kt index 6c9519d..2e94f84 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusQueryRepository.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.admin.charge +import com.querydsl.core.BooleanBuilder import com.querydsl.core.types.dsl.Expressions import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.can.QCan.can1 @@ -55,7 +56,8 @@ class AdminChargeStatusQueryRepository(private val queryFactory: JPAQueryFactory fun getChargeStatusDetail( startDate: LocalDateTime, endDate: LocalDateTime, - paymentGateway: PaymentGateway + paymentGateway: PaymentGateway, + currency: String? = null ): List { val formattedDate = Expressions.stringTemplate( "DATE_FORMAT({0}, {1})", @@ -68,6 +70,17 @@ class AdminChargeStatusQueryRepository(private val queryFactory: JPAQueryFactory ), "%Y-%m-%d %H:%i:%s" ) + val currencyExpr = Expressions.stringTemplate("RIGHT({0}, 3)", payment.locale) + val whereBuilder = BooleanBuilder() + whereBuilder.and(charge.createdAt.goe(startDate)) + .and(charge.createdAt.loe(endDate)) + .and(charge.status.eq(ChargeStatus.CHARGE)) + .and(payment.status.eq(PaymentStatus.COMPLETE)) + .and(payment.paymentGateway.eq(paymentGateway)) + + if (currency != null) { + whereBuilder.and(currencyExpr.eq(currency)) + } return queryFactory .select( @@ -76,7 +89,7 @@ class AdminChargeStatusQueryRepository(private val queryFactory: JPAQueryFactory member.nickname, payment.method.coalesce(""), payment.price, - payment.locale.coalesce(""), + currencyExpr.coalesce(""), formattedDate ) ) @@ -84,13 +97,7 @@ class AdminChargeStatusQueryRepository(private val queryFactory: JPAQueryFactory .innerJoin(charge.member, member) .innerJoin(charge.payment, payment) .leftJoin(charge.can, can1) - .where( - charge.createdAt.goe(startDate) - .and(charge.createdAt.loe(endDate)) - .and(charge.status.eq(ChargeStatus.CHARGE)) - .and(payment.status.eq(PaymentStatus.COMPLETE)) - .and(payment.paymentGateway.eq(paymentGateway)) - ) + .where(whereBuilder) .orderBy(formattedDate.desc()) .fetch() } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusService.kt index 67f4891..0b9a0c2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/charge/AdminChargeStatusService.kt @@ -60,7 +60,8 @@ class AdminChargeStatusService(val repository: AdminChargeStatusQueryRepository) fun getChargeStatusDetail( startDateStr: String, - paymentGateway: PaymentGateway + paymentGateway: PaymentGateway, + currency: String? = null ): List { val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") val startDate = LocalDate.parse(startDateStr, dateTimeFormatter).atTime(0, 0, 0) @@ -73,7 +74,7 @@ class AdminChargeStatusService(val repository: AdminChargeStatusQueryRepository) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() - return repository.getChargeStatusDetail(startDate, endDate, paymentGateway) + return repository.getChargeStatusDetail(startDate, endDate, paymentGateway, currency) .map { GetChargeStatusDetailResponse( memberId = it.memberId,