diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java index e13a117..f5d2562 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java @@ -118,22 +118,13 @@ public class KeyboardThemesServiceImpl extends ServiceImpl推荐规则:根据真实下载量降序排序,排除用户已购买的主题和当前查看的主题,最多返回8个主题

+

推荐规则:根据真实下载量降序排序,排除当前查看的主题,最多返回8个主题

@param userId 用户ID @param themeId 当前主题ID,需要从推荐列表中排除 - * @return 推荐主题列表,包含主题详情和购买状态(推荐列表中的主题购买状态均为未购买) + * @return 推荐主题列表,包含主题详情和购买状态 */ public List getRecommendedThemes(Long userId, Long themeId) { - // 查询用户已购买的主题ID集合 - Set purchasedThemeIds = purchaseService.lambdaQuery() - .eq(KeyboardThemePurchase::getUserId, userId) - .eq(KeyboardThemePurchase::getPayStatus, (short) 1) - .list() - .stream() - .map(KeyboardThemePurchase::getThemeId) - .collect(Collectors.toSet()); - // 构建查询器 LambdaQueryChainWrapper queryWrapper = this.lambdaQuery() .eq(KeyboardThemes::getDeleted, false) @@ -145,21 +136,25 @@ public class KeyboardThemesServiceImpl extends ServiceImpl themesList = queryWrapper.list(); - // 只取前8条数据 + // 查询用户已购买的主题ID集合 + Set purchasedThemeIds = purchaseService.lambdaQuery() + .eq(KeyboardThemePurchase::getUserId, userId) + .eq(KeyboardThemePurchase::getPayStatus, (short) 1) + .list() + .stream() + .map(KeyboardThemePurchase::getThemeId) + .collect(Collectors.toSet()); + + // 只取前8条数据并设置购买状态 return themesList.stream() .limit(8) .map(theme -> { KeyboardThemesRespVO vo = BeanUtil.copyProperties(theme, KeyboardThemesRespVO.class); - // 推荐列表中的主题均为未购买状态 - vo.setIsPurchased(false); + // 设置主题的实际购买状态 + vo.setIsPurchased(purchasedThemeIds.contains(theme.getId())); return vo; }).collect(Collectors.toList()); }