diff --git a/.omc/ultrawork-state.json b/.omc/ultrawork-state.json index 3b5f77d..e4cc879 100644 --- a/.omc/ultrawork-state.json +++ b/.omc/ultrawork-state.json @@ -2,6 +2,6 @@ "active": true, "started_at": "2026-01-26T13:01:18.447Z", "original_prompt": "刚刚回滚了代码,现在AI陪聊角色评论需要使用KeyboardAiCompanionCommentLikeService添加一个评论点赞接口,用来记录点赞和取消点赞。 ulw", - "reinforcement_count": 7, - "last_checked_at": "2026-01-27T10:31:33.079Z" + "reinforcement_count": 8, + "last_checked_at": "2026-01-27T10:35:42.226Z" } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/AiCompanionVO.java b/src/main/java/com/yolo/keyborad/model/vo/AiCompanionVO.java index b5add09..eb9a1f1 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/AiCompanionVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/AiCompanionVO.java @@ -55,6 +55,12 @@ public class AiCompanionVO { @Schema(description = "开场白音频") private String prologueAudio; + @Schema(description = "点赞总数") + private Integer likeCount; + + @Schema(description = "评论总数") + private Integer commentCount; + @Schema(description = "创建时间") private Date createdAt; } diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java index 823eed9..1079bc2 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiCompanionServiceImpl.java @@ -6,13 +6,22 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yolo.keyborad.common.ErrorCode; 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.service.KeyboardAiCompanionCommentService; +import com.yolo.keyborad.service.KeyboardAiCompanionLikeService; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yolo.keyborad.model.entity.KeyboardAiCompanion; import com.yolo.keyborad.mapper.KeyboardAiCompanionMapper; import com.yolo.keyborad.service.KeyboardAiCompanionService; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /* * @author: ziin * @date: 2026/1/26 13:51 @@ -20,6 +29,12 @@ import com.yolo.keyborad.service.KeyboardAiCompanionService; @Service public class KeyboardAiCompanionServiceImpl extends ServiceImpl implements KeyboardAiCompanionService { + @Resource + private KeyboardAiCompanionLikeService companionLikeService; + + @Resource + private KeyboardAiCompanionCommentService companionCommentService; + @Override public IPage pageList(Integer pageNum, Integer pageSize) { Page page = new Page<>(pageNum, pageSize); @@ -29,7 +44,43 @@ public class KeyboardAiCompanionServiceImpl extends ServiceImpl entityPage = this.page(page, queryWrapper); - return entityPage.convert(entity -> BeanUtil.copyProperties(entity, AiCompanionVO.class)); + + // 获取所有角色ID + List companionIds = entityPage.getRecords().stream() + .map(KeyboardAiCompanion::getId) + .collect(Collectors.toList()); + + // 批量统计点赞数 + Map likeCountMap = Map.of(); + if (!companionIds.isEmpty()) { + LambdaQueryWrapper likeWrapper = new LambdaQueryWrapper<>(); + likeWrapper.in(KeyboardAiCompanionLike::getCompanionId, companionIds) + .eq(KeyboardAiCompanionLike::getStatus, (short) 1); + List likes = companionLikeService.list(likeWrapper); + likeCountMap = likes.stream() + .collect(Collectors.groupingBy(KeyboardAiCompanionLike::getCompanionId, Collectors.counting())); + } + + // 批量统计评论数 + Map commentCountMap = Map.of(); + if (!companionIds.isEmpty()) { + LambdaQueryWrapper commentWrapper = new LambdaQueryWrapper<>(); + commentWrapper.in(KeyboardAiCompanionComment::getCompanionId, companionIds) + .eq(KeyboardAiCompanionComment::getStatus, (short) 1); + List comments = companionCommentService.list(commentWrapper); + commentCountMap = comments.stream() + .collect(Collectors.groupingBy(KeyboardAiCompanionComment::getCompanionId, Collectors.counting())); + } + + // 转换为VO并填充统计数据 + Map finalLikeCountMap = likeCountMap; + Map 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