新增区域用户银行账户余额查询test

This commit is contained in:
tianfeng 2026-01-16 12:30:02 +08:00
parent f03ac8c143
commit 8c442abcad
3 changed files with 154 additions and 2 deletions

View File

@ -33,4 +33,6 @@ public class SysOriginUserQryCmd extends Command {
* 日期.
*/
private String date;
private String countryCode;
}

View File

@ -1,6 +1,7 @@
package com.red.circle.other.infra.database.rds.service.user.user.impl;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.google.common.collect.Maps;
import com.red.circle.common.business.enums.AccountStatusEnum;
@ -55,9 +56,10 @@ public class BaseInfoServiceImpl extends BaseServiceImpl<BaseInfoDAO, BaseInfo>
public List<BaseInfo> listUser(SysOriginUserQryCmd qryCmd) {
//DAY,MONTH,YEAR
return query()
.ge(BaseInfo::getCreateTime,
.eq(StringUtils.isNotBlank(qryCmd.getCountryCode()), BaseInfo::getCountryCode, qryCmd.getCountryCode())
.ge(StringUtils.isNotBlank(qryCmd.getDate()), BaseInfo::getCreateTime,
TimestampUtils.convert(getStartDate(qryCmd.getDate(), qryCmd.getDateType())))
.le(BaseInfo::getCreateTime,
.le(StringUtils.isNotBlank(qryCmd.getDate()), BaseInfo::getCreateTime,
TimestampUtils.convert(getEndDate(qryCmd.getDate(), qryCmd.getDateType())))
.list();
}

View File

@ -0,0 +1,148 @@
package bank;
import com.red.circle.OtherServiceApplication;
import com.red.circle.other.app.inner.service.user.user.UserBaseInfoClientService;
import com.red.circle.other.inner.model.cmd.count.SysOriginUserQryCmd;
import com.red.circle.other.inner.model.dto.user.SysUserBaseInfoDTO;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@SpringBootTest(classes = OtherServiceApplication.class)
@RunWith(SpringRunner.class)
public class UserBankQueryTest {
@Autowired
private UserBaseInfoClientService userBaseInfoClientService;
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void test(){
// 1. MySQL 查询 BD 国家的用户
SysOriginUserQryCmd qryCmd = new SysOriginUserQryCmd();
qryCmd.setCountryCode("BD");
List<SysUserBaseInfoDTO> userAll = userBaseInfoClientService.getUserAll(qryCmd);
System.out.println("查询到 BD 国家用户总数: " + userAll.size());
if (userAll.isEmpty()) {
System.out.println("未找到任何 BD 国家的用户");
return;
}
// 2. 提取用户 ID 列表
List<Long> userIds = userAll.stream()
.map(SysUserBaseInfoDTO::getId)
.collect(Collectors.toList());
// 3. MongoDB 查询银行账户数据
Query query = new Query();
query.addCriteria(Criteria.where("_id").in(userIds));
List<Map> bankBalances = mongoTemplate.find(query, Map.class, "user_bank_balance");
System.out.println("查询到银行账户数据总数: " + bankBalances.size());
System.out.println();
if (bankBalances.isEmpty()) {
System.out.println("未找到任何银行账户数据");
return;
}
// 4. 按余额倒序排序并打印
bankBalances.stream()
.sorted(Comparator.comparing(
(Map map) -> getLongValue(map.get("balance")),
Comparator.reverseOrder()
))
.forEach(bankBalance -> {
Long userId = getLongValue(bankBalance.get("_id"));
Long balance = getLongValue(bankBalance.get("balance"));
BigDecimal balanceDecimal = new BigDecimal(balance)
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
System.out.printf("用户ID: %-15s | 余额: %s%n", userId, balanceDecimal);
});
// 5. 统计汇总数据
long totalBalance = 0L;
int countAbove1000 = 0;
int countAbove500 = 0;
int countAbove100 = 0;
int countBelow100 = 0;
for (Map bankBalance : bankBalances) {
Long balance = getLongValue(bankBalance.get("balance"));
totalBalance += balance;
BigDecimal balanceDecimal = new BigDecimal(balance)
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
if (balanceDecimal.compareTo(new BigDecimal("1000")) >= 0) {
countAbove1000++;
} else if (balanceDecimal.compareTo(new BigDecimal("500")) >= 0) {
countAbove500++;
} else if (balanceDecimal.compareTo(new BigDecimal("100")) >= 0) {
countAbove100++;
} else if (balanceDecimal.compareTo(new BigDecimal("0")) > 0) {
countBelow100++;
}
}
BigDecimal totalBalanceDecimal = new BigDecimal(totalBalance)
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
// 6. 打印汇总
System.out.println();
System.out.println("========================================");
System.out.println("数据汇总:");
System.out.println("========================================");
System.out.println("总数量: " + bankBalances.size() + "");
System.out.println("总余额: " + totalBalanceDecimal);
System.out.println("----------------------------------------");
System.out.println("1000以上用户数: " + countAbove1000 + "");
System.out.println("500以上用户数: " + countAbove500 + "");
System.out.println("100以上用户数: " + countAbove100 + "");
System.out.println("100以下用户数: " + countBelow100 + "");
System.out.println("========================================");
}
/**
* 获取 Long 处理 null 和类型转换
*/
private Long getLongValue(Object value) {
if (value == null) {
return 0L;
}
if (value instanceof Long) {
return (Long) value;
}
if (value instanceof Integer) {
return ((Integer) value).longValue();
}
if (value instanceof String) {
try {
return Long.parseLong((String) value);
} catch (NumberFormatException e) {
return 0L;
}
}
return 0L;
}
}