This commit is contained in:
hy001 2026-05-20 10:17:06 +08:00
parent 35ceb5d80f
commit f6995c519a
2 changed files with 38 additions and 3 deletions

View File

@ -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) {

View File

@ -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());
}
}