feat(ai-companion): 补充点赞与评论统计字段
- 在 AiCompanionVO 新增 likeCount、commentCount - 分页接口批量聚合点赞/评论数并填充到 VO - 减少 N+1 查询,提升列表接口性能
This commit is contained in:
@@ -2,6 +2,6 @@
|
|||||||
"active": true,
|
"active": true,
|
||||||
"started_at": "2026-01-26T13:01:18.447Z",
|
"started_at": "2026-01-26T13:01:18.447Z",
|
||||||
"original_prompt": "刚刚回滚了代码,现在AI陪聊角色评论需要使用KeyboardAiCompanionCommentLikeService添加一个评论点赞接口,用来记录点赞和取消点赞。 ulw",
|
"original_prompt": "刚刚回滚了代码,现在AI陪聊角色评论需要使用KeyboardAiCompanionCommentLikeService添加一个评论点赞接口,用来记录点赞和取消点赞。 ulw",
|
||||||
"reinforcement_count": 7,
|
"reinforcement_count": 8,
|
||||||
"last_checked_at": "2026-01-27T10:31:33.079Z"
|
"last_checked_at": "2026-01-27T10:35:42.226Z"
|
||||||
}
|
}
|
||||||
@@ -55,6 +55,12 @@ public class AiCompanionVO {
|
|||||||
@Schema(description = "开场白音频")
|
@Schema(description = "开场白音频")
|
||||||
private String prologueAudio;
|
private String prologueAudio;
|
||||||
|
|
||||||
|
@Schema(description = "点赞总数")
|
||||||
|
private Integer likeCount;
|
||||||
|
|
||||||
|
@Schema(description = "评论总数")
|
||||||
|
private Integer commentCount;
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
@Schema(description = "创建时间")
|
||||||
private Date createdAt;
|
private Date createdAt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,22 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.yolo.keyborad.common.ErrorCode;
|
import com.yolo.keyborad.common.ErrorCode;
|
||||||
import com.yolo.keyborad.exception.BusinessException;
|
import com.yolo.keyborad.exception.BusinessException;
|
||||||
|
import com.yolo.keyborad.model.entity.KeyboardAiCompanionComment;
|
||||||
|
import com.yolo.keyborad.model.entity.KeyboardAiCompanionLike;
|
||||||
import com.yolo.keyborad.model.vo.AiCompanionVO;
|
import com.yolo.keyborad.model.vo.AiCompanionVO;
|
||||||
|
import com.yolo.keyborad.service.KeyboardAiCompanionCommentService;
|
||||||
|
import com.yolo.keyborad.service.KeyboardAiCompanionLikeService;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.yolo.keyborad.model.entity.KeyboardAiCompanion;
|
import com.yolo.keyborad.model.entity.KeyboardAiCompanion;
|
||||||
import com.yolo.keyborad.mapper.KeyboardAiCompanionMapper;
|
import com.yolo.keyborad.mapper.KeyboardAiCompanionMapper;
|
||||||
import com.yolo.keyborad.service.KeyboardAiCompanionService;
|
import com.yolo.keyborad.service.KeyboardAiCompanionService;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @author: ziin
|
* @author: ziin
|
||||||
* @date: 2026/1/26 13:51
|
* @date: 2026/1/26 13:51
|
||||||
@@ -20,6 +29,12 @@ import com.yolo.keyborad.service.KeyboardAiCompanionService;
|
|||||||
@Service
|
@Service
|
||||||
public class KeyboardAiCompanionServiceImpl extends ServiceImpl<KeyboardAiCompanionMapper, KeyboardAiCompanion> implements KeyboardAiCompanionService {
|
public class KeyboardAiCompanionServiceImpl extends ServiceImpl<KeyboardAiCompanionMapper, KeyboardAiCompanion> implements KeyboardAiCompanionService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private KeyboardAiCompanionLikeService companionLikeService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private KeyboardAiCompanionCommentService companionCommentService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<AiCompanionVO> pageList(Integer pageNum, Integer pageSize) {
|
public IPage<AiCompanionVO> pageList(Integer pageNum, Integer pageSize) {
|
||||||
Page<KeyboardAiCompanion> page = new Page<>(pageNum, pageSize);
|
Page<KeyboardAiCompanion> page = new Page<>(pageNum, pageSize);
|
||||||
@@ -29,7 +44,43 @@ public class KeyboardAiCompanionServiceImpl extends ServiceImpl<KeyboardAiCompan
|
|||||||
.orderByDesc(KeyboardAiCompanion::getSortOrder)
|
.orderByDesc(KeyboardAiCompanion::getSortOrder)
|
||||||
.orderByDesc(KeyboardAiCompanion::getPopularityScore);
|
.orderByDesc(KeyboardAiCompanion::getPopularityScore);
|
||||||
IPage<KeyboardAiCompanion> entityPage = this.page(page, queryWrapper);
|
IPage<KeyboardAiCompanion> entityPage = this.page(page, queryWrapper);
|
||||||
return entityPage.convert(entity -> BeanUtil.copyProperties(entity, AiCompanionVO.class));
|
|
||||||
|
// 获取所有角色ID
|
||||||
|
List<Long> companionIds = entityPage.getRecords().stream()
|
||||||
|
.map(KeyboardAiCompanion::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 批量统计点赞数
|
||||||
|
Map<Long, Long> likeCountMap = Map.of();
|
||||||
|
if (!companionIds.isEmpty()) {
|
||||||
|
LambdaQueryWrapper<KeyboardAiCompanionLike> likeWrapper = new LambdaQueryWrapper<>();
|
||||||
|
likeWrapper.in(KeyboardAiCompanionLike::getCompanionId, companionIds)
|
||||||
|
.eq(KeyboardAiCompanionLike::getStatus, (short) 1);
|
||||||
|
List<KeyboardAiCompanionLike> likes = companionLikeService.list(likeWrapper);
|
||||||
|
likeCountMap = likes.stream()
|
||||||
|
.collect(Collectors.groupingBy(KeyboardAiCompanionLike::getCompanionId, Collectors.counting()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量统计评论数
|
||||||
|
Map<Long, Long> commentCountMap = Map.of();
|
||||||
|
if (!companionIds.isEmpty()) {
|
||||||
|
LambdaQueryWrapper<KeyboardAiCompanionComment> commentWrapper = new LambdaQueryWrapper<>();
|
||||||
|
commentWrapper.in(KeyboardAiCompanionComment::getCompanionId, companionIds)
|
||||||
|
.eq(KeyboardAiCompanionComment::getStatus, (short) 1);
|
||||||
|
List<KeyboardAiCompanionComment> comments = companionCommentService.list(commentWrapper);
|
||||||
|
commentCountMap = comments.stream()
|
||||||
|
.collect(Collectors.groupingBy(KeyboardAiCompanionComment::getCompanionId, Collectors.counting()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转换为VO并填充统计数据
|
||||||
|
Map<Long, Long> finalLikeCountMap = likeCountMap;
|
||||||
|
Map<Long, Long> finalCommentCountMap = commentCountMap;
|
||||||
|
return entityPage.convert(entity -> {
|
||||||
|
AiCompanionVO vo = BeanUtil.copyProperties(entity, AiCompanionVO.class);
|
||||||
|
vo.setLikeCount(finalLikeCountMap.getOrDefault(entity.getId(), 0L).intValue());
|
||||||
|
vo.setCommentCount(finalCommentCountMap.getOrDefault(entity.getId(), 0L).intValue());
|
||||||
|
return vo;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user