新增礼物流水统计test

This commit is contained in:
tianfeng 2025-12-03 15:58:48 +08:00
parent a1f88ffc5c
commit fdff177011

View File

@ -0,0 +1,238 @@
package statistics;
import com.red.circle.OtherServiceApplication;
import com.red.circle.other.infra.database.mongo.entity.gift.GiftAcceptUser;
import com.red.circle.other.infra.database.mongo.entity.gift.GiftGiveRunningWater;
import lombok.extern.slf4j.Slf4j;
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.util.List;
import java.util.Objects;
/**
* 礼物流水统计测试.
*
* @author Claude
*/
@Slf4j
@SpringBootTest(classes = OtherServiceApplication.class)
@RunWith(SpringRunner.class)
public class GiftStatisticsTest {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 统计指定用户的累计礼物收入流水.
*/
@Test
public void testUserGiftStatistics() {
// TODO: 修改为要统计的用户ID
Long targetUserId = 1987264165204762626L;
BigDecimal totalAmount = calculateUserGiftIncome(targetUserId);
log.info("========================================");
log.info("用户ID: {}", targetUserId);
log.info("累计礼物收入: {}", totalAmount);
log.info("========================================");
}
/**
* 批量统计多个用户的礼物收入.
*/
@Test
public void testBatchUserGiftStatistics() {
// TODO: 修改为要统计的用户ID列表
Long[] userIds = {1234567890L, 9876543210L, 1111111111L};
log.info("========================================");
log.info("开始批量统计礼物流水");
log.info("========================================");
for (Long userId : userIds) {
BigDecimal totalAmount = calculateUserGiftIncome(userId);
log.info("用户ID: {} | 累计礼物收入: {}", userId, totalAmount);
}
log.info("========================================");
log.info("批量统计完成");
log.info("========================================");
}
/**
* 统计指定时间段内用户的礼物收入.
*/
@Test
public void testUserGiftStatisticsWithTimeRange() {
// TODO: 修改参数
Long targetUserId = 1234567890L;
Integer startDateNum = 20241201; // 开始日期 格式yyyyMMdd
Integer endDateNum = 20241231; // 结束日期 格式yyyyMMdd
BigDecimal totalAmount = calculateUserGiftIncomeWithTimeRange(
targetUserId, startDateNum, endDateNum);
log.info("========================================");
log.info("用户ID: {}", targetUserId);
log.info("统计时间段: {} - {}", startDateNum, endDateNum);
log.info("累计礼物收入: {}", totalAmount);
log.info("========================================");
}
/**
* 详细统计打印每笔礼物记录.
*/
@Test
public void testUserGiftStatisticsDetail() {
// TODO: 修改为要统计的用户ID
Long targetUserId = 1234567890L;
Query query = new Query();
query.addCriteria(Criteria.where("acceptUsers.acceptUserId").is(targetUserId));
List<GiftGiveRunningWater> waterList = mongoTemplate.find(
query, GiftGiveRunningWater.class, "gift_give_running_water");
log.info("========================================");
log.info("用户ID: {} 的礼物收入明细", targetUserId);
log.info("总记录数: {}", waterList.size());
log.info("========================================");
BigDecimal totalAmount = BigDecimal.ZERO;
int recordIndex = 1;
for (GiftGiveRunningWater water : waterList) {
if (water.getAcceptUsers() != null) {
for (GiftAcceptUser acceptUser : water.getAcceptUsers()) {
if (Objects.equals(acceptUser.getAcceptUserId(), targetUserId)) {
BigDecimal targetAmount = acceptUser.getTargetAmount() != null
? acceptUser.getTargetAmount() : BigDecimal.ZERO;
totalAmount = totalAmount.add(targetAmount);
log.info("第 {} 笔 | 流水ID: {} | 发送人: {} | 礼物ID: {} | 金额: {} | 时间: {}",
recordIndex++,
water.getId(),
water.getUserId(),
water.getGiftId(),
targetAmount,
water.getCreateTime());
}
}
}
}
log.info("========================================");
log.info("累计礼物收入: {}", totalAmount);
log.info("========================================");
}
/**
* 按来源系统统计用户礼物收入.
*/
@Test
public void testUserGiftStatisticsBySysOrigin() {
// TODO: 修改参数
Long targetUserId = 1234567890L;
String sysOrigin = "LIKEI"; // 系统来源
Query query = new Query();
query.addCriteria(Criteria.where("acceptUsers.acceptUserId").is(targetUserId));
query.addCriteria(Criteria.where("sysOrigin").is(sysOrigin));
List<GiftGiveRunningWater> waterList = mongoTemplate.find(
query, GiftGiveRunningWater.class, "gift_give_running_water");
BigDecimal totalAmount = BigDecimal.ZERO;
for (GiftGiveRunningWater water : waterList) {
if (water.getAcceptUsers() != null) {
for (GiftAcceptUser acceptUser : water.getAcceptUsers()) {
if (Objects.equals(acceptUser.getAcceptUserId(), targetUserId)) {
BigDecimal targetAmount = acceptUser.getTargetAmount() != null
? acceptUser.getTargetAmount() : BigDecimal.ZERO;
totalAmount = totalAmount.add(targetAmount);
}
}
}
}
log.info("========================================");
log.info("用户ID: {}", targetUserId);
log.info("系统来源: {}", sysOrigin);
log.info("累计礼物收入: {}", totalAmount);
log.info("========================================");
}
/**
* 计算指定用户的累计礼物收入.
*
* @param userId 用户ID
* @return 累计金额
*/
private BigDecimal calculateUserGiftIncome(Long userId) {
Query query = new Query();
query.addCriteria(Criteria.where("userId").is(userId));
List<GiftGiveRunningWater> waterList = mongoTemplate.find(
query, GiftGiveRunningWater.class, "gift_give_running_water");
BigDecimal totalAmount = BigDecimal.ZERO;
for (GiftGiveRunningWater water : waterList) {
if (water.getAcceptUsers() != null) {
for (GiftAcceptUser acceptUser : water.getAcceptUsers()) {
if (Objects.equals(acceptUser.getAcceptUserId(), userId)) {
BigDecimal targetAmount = acceptUser.getTargetAmount() != null
? acceptUser.getTargetAmount() : BigDecimal.ZERO;
totalAmount = totalAmount.add(targetAmount);
}
}
}
}
return totalAmount;
}
/**
* 计算指定用户在指定时间段内的累计礼物收入.
*
* @param userId 用户ID
* @param startDateNum 开始日期沙特时间格式yyyyMMdd
* @param endDateNum 结束日期沙特时间格式yyyyMMdd
* @return 累计金额
*/
private BigDecimal calculateUserGiftIncomeWithTimeRange(
Long userId, Integer startDateNum, Integer endDateNum) {
Query query = new Query();
query.addCriteria(Criteria.where("userId").is(userId));
query.addCriteria(Criteria.where("createTime").gte(startDateNum).lte(endDateNum));
List<GiftGiveRunningWater> waterList = mongoTemplate.find(
query, GiftGiveRunningWater.class, "gift_give_running_water");
BigDecimal totalAmount = BigDecimal.ZERO;
for (GiftGiveRunningWater water : waterList) {
if (water.getAcceptUsers() != null) {
for (GiftAcceptUser acceptUser : water.getAcceptUsers()) {
if (Objects.equals(acceptUser.getAcceptUserId(), userId)) {
BigDecimal targetAmount = acceptUser.getTargetAmount() != null
? acceptUser.getTargetAmount() : BigDecimal.ZERO;
totalAmount = totalAmount.add(targetAmount);
}
}
}
}
return totalAmount;
}
}