From f6995c519aaf3267f03d9e954898a37a14f89118 Mon Sep 17 00:00:00 2001 From: hy001 Date: Wed, 20 May 2026 10:17:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=B1=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bank/impl/UserBankBalanceServiceImpl.java | 16 +++++++++--- .../impl/UserBankBalanceServiceImplTest.java | 25 +++++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImpl.java b/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImpl.java index 30b0bb17..5b6cf808 100644 --- a/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImpl.java +++ b/rc-service/rc-service-wallet/wallet-infrastructure/src/main/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImpl.java @@ -125,7 +125,8 @@ public class UserBankBalanceServiceImpl implements UserBankBalanceService { boolean sorted = isSorted(query); Criteria criteria = buildCriteria(query); - if (!sorted && Objects.nonNull(query.getLastId()) && Objects.isNull(query.getUserId())) { + if (!sorted && Objects.nonNull(query) && Objects.nonNull(query.getLastId()) + && Objects.isNull(query.getUserId())) { criteria.and("id").lt(query.getLastId()); } @@ -174,6 +175,9 @@ public class UserBankBalanceServiceImpl implements UserBankBalanceService { private Criteria buildCriteria(UserBankBalanceQryCmd query) { Criteria criteria = new Criteria(); + if (Objects.isNull(query)) { + return criteria; + } if (Objects.nonNull(query.getSysOrigin())) { criteria.and("sysOrigin").is(query.getSysOrigin()); } @@ -194,19 +198,25 @@ public class UserBankBalanceServiceImpl implements UserBankBalanceService { } private boolean isSorted(UserBankBalanceQryCmd query) { + if (Objects.isNull(query) || Objects.isNull(query.getSortField()) + || Objects.isNull(query.getSortOrder())) { + return false; + } return SORTABLE_FIELDS.contains(query.getSortField()) && ("ascend".equalsIgnoreCase(query.getSortOrder()) || "descend".equalsIgnoreCase(query.getSortOrder())); } private int getLimit(UserBankBalanceQryCmd query) { - return Objects.nonNull(query.getLimit()) && query.getLimit() > 0 + return Objects.nonNull(query) && Objects.nonNull(query.getLimit()) && query.getLimit() > 0 ? query.getLimit() : DEFAULT_LIMIT; } private int getPageNo(UserBankBalanceQryCmd query) { - return Objects.nonNull(query.getPageNo()) && query.getPageNo() > 0 ? query.getPageNo() : 1; + return Objects.nonNull(query) && Objects.nonNull(query.getPageNo()) && query.getPageNo() > 0 + ? query.getPageNo() + : 1; } private BigDecimal getAccurateAmount(Document document, String key) { diff --git a/rc-service/rc-service-wallet/wallet-start/src/test/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImplTest.java b/rc-service/rc-service-wallet/wallet-start/src/test/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImplTest.java index a277c669..45722f16 100644 --- a/rc-service/rc-service-wallet/wallet-start/src/test/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImplTest.java +++ b/rc-service/rc-service-wallet/wallet-start/src/test/java/com/red/circle/wallet/infra/database/mongo/service/bank/impl/UserBankBalanceServiceImplTest.java @@ -1,9 +1,20 @@ package com.red.circle.wallet.infra.database.mongo.service.bank.impl; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import com.red.circle.component.mongodb.config.MongoPrimaryService; +import com.red.circle.wallet.infra.database.mongo.entity.bank.UserBankBalance; +import com.red.circle.wallet.inner.model.cmd.UserBankBalanceQryCmd; +import java.util.List; import org.bson.Document; import org.junit.jupiter.api.Test; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Query; class UserBankBalanceServiceImplTest { @@ -27,4 +38,18 @@ class UserBankBalanceServiceImplTest { assertEquals(0L, UserBankBalanceServiceImpl.getLongValue(document, "balance")); } + + @Test + void listBalanceUsesDefaultSortWhenSortFieldsAreMissing() { + MongoTemplate mongoTemplate = mock(MongoTemplate.class); + when(mongoTemplate.find(any(Query.class), eq(UserBankBalance.class))).thenReturn(List.of()); + UserBankBalanceServiceImpl service = new UserBankBalanceServiceImpl( + mongoTemplate, mock(MongoPrimaryService.class)); + + List result = service.listBalance(new UserBankBalanceQryCmd() + .setSysOrigin("LIKEI") + .setLimit(1)); + + assertTrue(result.isEmpty()); + } }