diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/dynamic/query/DynamicDetailsQryExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/dynamic/query/DynamicDetailsQryExe.java index 62cb3553..cce56de5 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/dynamic/query/DynamicDetailsQryExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/dynamic/query/DynamicDetailsQryExe.java @@ -13,6 +13,7 @@ import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicPicture; import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicTag; import com.red.circle.other.infra.database.rds.service.dynamic.DynamicCommentService; import com.red.circle.other.infra.database.rds.service.dynamic.DynamicContentService; +import com.red.circle.other.infra.database.rds.service.dynamic.DynamicGiftService; import com.red.circle.other.infra.database.rds.service.dynamic.DynamicLikeService; import com.red.circle.other.infra.database.rds.service.dynamic.DynamicPictureService; import com.red.circle.other.infra.database.rds.service.dynamic.DynamicTagService; @@ -48,6 +49,7 @@ public class DynamicDetailsQryExe { private final DynamicContentService dynamicContentService; private final DynamicPictureService dynamicPictureService; private final DynamicCommentService dynamicCommentService; + private final DynamicGiftService dynamicGiftService; private final UserSubscriptionService userSubscriptionService; private final UserProfileAppConvertor userProfileAppConvertor; @@ -65,6 +67,7 @@ public class DynamicDetailsQryExe { //自己是否已点赞 Map likeMap = getLikeMap(cmd, contentIds); Map likeQuantityMap = dynamicLikeService.mapLikeQuantity(contentIds); + Map giftQuantityMap = dynamicGiftService.mapGiftQuantity(contentIds); Map commentQuantityMap = dynamicCommentService.mapCommentQuantity(contentIds); Map> pictureMap = dynamicPictureService.mapPreviewGroup(contentIds); @@ -76,6 +79,7 @@ public class DynamicDetailsQryExe { result.setSubscription(checkSubscription(cmd.getReqUserId(), dynamic.getCreateUser())); result.setLikeStrQuantity(NumUtils.formatLong(likeQuantityMap.get(dynamic.getId()))); result.setLike(Optional.ofNullable(likeMap.get(dynamic.getId())).orElse(Boolean.FALSE)); + result.setGiftStrQuantity(NumUtils.formatLong(giftQuantityMap.get(dynamic.getId()))); result.setCommentStrQuantity(NumUtils.formatInt(commentQuantityMap.get(dynamic.getId()))); return result; diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/dynamic/DynamicListCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/dynamic/DynamicListCO.java index 75324852..5e42337e 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/dynamic/DynamicListCO.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/dynamic/DynamicListCO.java @@ -95,6 +95,11 @@ public class DynamicListCO extends ClientObject { */ private String likeStrQuantity; + /** + * 礼物数量. + */ + private String giftStrQuantity; + /** * 创建时间. */ diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/DynamicGiftService.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/DynamicGiftService.java index cca2d4a6..5dc444b0 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/DynamicGiftService.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/DynamicGiftService.java @@ -5,6 +5,8 @@ import com.red.circle.framework.dto.PageResult; import com.red.circle.framework.mybatis.service.BaseService; import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicGift; import java.math.BigDecimal; +import java.util.Collection; +import java.util.Map; /** * 动态-礼物 服务类. @@ -35,4 +37,12 @@ public interface DynamicGiftService extends BaseService { */ PageResult pageByUpdateTimeDesc(PageQuery pageQuery, Long contentId); + /** + * 统计动态礼物数量(所有用户送的总数). + * + * @param contentIds 动态内容ID集合 + * @return key: contentId, value: 礼物总数 + */ + Map mapGiftQuantity(Collection contentIds); + } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/impl/DynamicGiftServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/impl/DynamicGiftServiceImpl.java index 87e8fd0c..12c08291 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/impl/DynamicGiftServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/dynamic/impl/DynamicGiftServiceImpl.java @@ -8,9 +8,12 @@ import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicGift; import com.red.circle.other.infra.database.rds.service.dynamic.DynamicGiftService; import java.math.BigDecimal; import java.sql.Timestamp; +import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; /** * 动态-礼物 服务实现类. @@ -67,4 +70,40 @@ public class DynamicGiftServiceImpl extends BaseServiceImpl mapGiftQuantity(java.util.Collection contentIds) { + if (CollectionUtils.isEmpty(contentIds)) { + return java.util.Collections.emptyMap(); + } + + // 查询所有礼物记录 + List gifts = query() + .select(DynamicGift::getDynamicContentId, DynamicGift::getGiftQuantity) + .in(DynamicGift::getDynamicContentId, contentIds) + .list(); + + if (CollectionUtils.isEmpty(gifts)) { + return contentIds.stream() + .collect(java.util.stream.Collectors.toMap( + java.util.function.Function.identity(), + id -> 0L + )); + } + + // 按 contentId 分组统计总数 + Map result = new java.util.HashMap<>(); + for (DynamicGift gift : gifts) { + Long contentId = gift.getDynamicContentId(); + Long quantity = gift.getGiftQuantity().longValue(); + result.put(contentId, result.getOrDefault(contentId, 0L) + quantity); + } + + // 为所有 contentId 设置默认值 + for (Long contentId : contentIds) { + result.putIfAbsent(contentId, 0L); + } + + return result; + } + }