feat(comment): 新增评论热度计算与更新功能

- 在评论数据对象中新增 childCommentTotal 和 heat 字段
- 扩展 CommentDOMapper 支持批量更新评论热度值
- 新增 CommentHeatBO 类用于封装评论热度信息
- 实现基于点赞数和回复数的热度值计算工具类 HeatCalculator
- 添加 RocketMQ 消费者异步处理评论热度更新消息
- 引入 buffer-trigger依赖实现消息聚合发送
- 扩展 JsonUtils 工具类支持 Set 类型反序列化
- 新增 MQ 常量 TOPIC_COMMENT_HEAT_UPDATE用于热度更新主题
- 修改 SQL 脚本增加 heat 字段并设置默认值- 更新测试接口请求参数内容以适配新逻辑
This commit is contained in:
2025-11-07 21:19:42 +08:00
parent 9ec330216f
commit c454e1832c
13 changed files with 272 additions and 5 deletions

View File

@@ -7,6 +7,11 @@ public interface MQConstants {
*/
String TOPIC_COUNT_NOTE_COMMENT = "CountNoteCommentTopic";
/**
* Topic: 评论热度值更新
*/
String TOPIC_COMMENT_HEAT_UPDATE = "CommentHeatUpdateTopic";
/**
* Topic: 计数 - 笔记点赞数
*/

View File

@@ -10,14 +10,20 @@ import com.hanserwei.hannote.count.biz.enums.CommentLevelEnum;
import com.hanserwei.hannote.count.biz.model.dto.CountPublishCommentMqDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Component
@@ -27,6 +33,9 @@ import java.util.stream.Collectors;
@Slf4j
public class CountNoteChildCommentConsumer implements RocketMQListener<String> {
@Resource
private RocketMQTemplate rocketMQTemplate;
@Resource
private CommentDOMapper commentDOMapper;
@@ -76,5 +85,24 @@ public class CountNoteChildCommentConsumer implements RocketMQListener<String> {
// 更新一级评论的下级评论总数,进行累加操作
commentDOMapper.updateChildCommentTotal(parentId, count);
}
// 获取字典中所用的评论ID
Set<Long> commentIds = groupMap.keySet();
// 异步发送MQ消息计数更新评论热度值
Message<String> message = MessageBuilder.withPayload(JsonUtils.toJsonString(commentIds))
.build();
// 异步发送 MQ 消息
rocketMQTemplate.asyncSend(MQConstants.TOPIC_COMMENT_HEAT_UPDATE, message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
log.info("==> 【评论热度值更新】MQ 发送成功SendResult: {}", sendResult);
}
@Override
public void onException(Throwable throwable) {
log.error("==> 【评论热度值更新】MQ 发送异常: ", throwable);
}
});
}
}