From 5c9c8f7cfb6341845d0b0959ef0db528a72a2dbb Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Sat, 13 Dec 2025 15:16:20 +0800 Subject: [PATCH] add test --- .../src/test/java/AnchorGiftTest.java | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 rc-service/rc-service-other/other-start/src/test/java/AnchorGiftTest.java diff --git a/rc-service/rc-service-other/other-start/src/test/java/AnchorGiftTest.java b/rc-service/rc-service-other/other-start/src/test/java/AnchorGiftTest.java new file mode 100644 index 00000000..a77217a6 --- /dev/null +++ b/rc-service/rc-service-other/other-start/src/test/java/AnchorGiftTest.java @@ -0,0 +1,93 @@ +package com.red.circle.other.test; + +import com.mongodb.client.result.DeleteResult; +import com.red.circle.OtherServiceApplication; +import java.math.BigDecimal; +import org.bson.Document; +import org.bson.types.Decimal128; +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.aggregation.Aggregation; +import org.springframework.data.mongodb.core.aggregation.AggregationResults; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * 主播礼物测试类 + */ +@SpringBootTest(classes = OtherServiceApplication.class) +@RunWith(SpringRunner.class) +public class AnchorGiftTest { + + @Autowired + private MongoTemplate mongoTemplate; + + /** + * 统计指定发送人和接收人之间的目标总金额 + */ + @Test + public void testQueryTargetAmountSum() { + Long userId = 1996197707655929857L; // 发送礼物的人 + Long acceptUserId = 1996197707655929857L; // 接收礼物的人 + + BigDecimal totalTargetAmount = queryTargetAmountSum(userId, acceptUserId); + + System.out.println("发送人ID: " + userId); + System.out.println("接收人ID: " + acceptUserId); + System.out.println("目标总金额: " + totalTargetAmount); + } + + /** + * 查询指定发送人和接收人之间的目标总金额 + * + * @param userId 发送礼物的人ID + * @param acceptUserId 接收礼物的人ID + * @return 目标总金额 + */ + private BigDecimal queryTargetAmountSum(Long userId, Long acceptUserId) { + // 构建聚合查询 + Aggregation aggregation = Aggregation.newAggregation( + // 1. 匹配发送人 + Aggregation.match(Criteria.where("userId").is(userId)), + + // 2. 展开 acceptUsers 数组 + Aggregation.unwind("acceptUsers"), + + // 3. 匹配接收人 + Aggregation.match(Criteria.where("acceptUsers.acceptUserId").is(acceptUserId)), + + // 4. 聚合求和 + Aggregation.group() + .sum("acceptUsers.targetAmount").as("totalTargetAmount") + ); + + // 执行聚合查询 + AggregationResults results = mongoTemplate.aggregate( + aggregation, + "gift_give_running_water", + Document.class + ); + + // 获取结果 + Document result = results.getUniqueMappedResult(); + if (result == null || result.get("totalTargetAmount") == null) { + return BigDecimal.ZERO; + } + + // MongoDB 中的 Decimal128 需要转换为 BigDecimal + Object totalAmount = result.get("totalTargetAmount"); + if (totalAmount instanceof Decimal128) { + return ((Decimal128) totalAmount).bigDecimalValue(); + } else if (totalAmount instanceof BigDecimal) { + return (BigDecimal) totalAmount; + } else if (totalAmount instanceof Number) { + return new BigDecimal(totalAmount.toString()); + } + + return BigDecimal.ZERO; + } + +} \ No newline at end of file