diff --git a/src/main/java/com/yolo/keyborad/controller/ThemesController.java b/src/main/java/com/yolo/keyborad/controller/ThemesController.java index 8c29804..04cb9a0 100644 --- a/src/main/java/com/yolo/keyborad/controller/ThemesController.java +++ b/src/main/java/com/yolo/keyborad/controller/ThemesController.java @@ -42,8 +42,8 @@ public class ThemesController { @GetMapping("/listByStyle") @Operation(summary = "按风格查询主题", description = "按主题风格查询主题列表接口") public BaseResponse> listByStyle(@RequestParam("themeStyle") Long themeStyleId) { - return ResultUtils.success(themesService.selectThemesByStyle(themeStyleId)); - } + Long userId = StpUtil.getLoginIdAsLong(); + return ResultUtils.success(themesService.selectThemesByStyle(themeStyleId,userId));} @GetMapping("/listAllStyles") @Operation(summary = "查询所有主题风格", description = "查询所有主题风格列表接口") diff --git a/src/main/java/com/yolo/keyborad/model/vo/themes/KeyboardThemesRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/themes/KeyboardThemesRespVO.java index 8efed29..21296af 100644 --- a/src/main/java/com/yolo/keyborad/model/vo/themes/KeyboardThemesRespVO.java +++ b/src/main/java/com/yolo/keyborad/model/vo/themes/KeyboardThemesRespVO.java @@ -67,4 +67,7 @@ public class KeyboardThemesRespVO { @Schema(description = "是否免费") private Boolean isFree; + + @Schema(description = "当前用户是否已购买") + private Boolean isPurchased; } diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java b/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java index fb697bc..c2f91f2 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java @@ -12,11 +12,13 @@ import java.util.List; public interface KeyboardThemesService extends IService{ + /** - * 按主题风格查询主题列表(未删除且上架) + * 按主题风格查询主题列表(未删除且上架),包含用户购买状态 * @param themeStyle 主题风格 + * @param userId 用户ID * @return 主题列表 */ - List selectThemesByStyle(Long themeStyle); + List selectThemesByStyle(Long themeStyle, Long userId); } 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 e48b189..1231e3a 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java @@ -1,9 +1,15 @@ package com.yolo.keyborad.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.yolo.keyborad.model.entity.KeyboardThemePurchase; +import com.yolo.keyborad.service.KeyboardThemePurchaseService; +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yolo.keyborad.mapper.KeyboardThemesMapper; import com.yolo.keyborad.model.entity.KeyboardThemes; @@ -17,21 +23,39 @@ import com.yolo.keyborad.service.KeyboardThemesService; @Service public class KeyboardThemesServiceImpl extends ServiceImpl implements KeyboardThemesService { + @Resource + @Lazy // 延迟加载,打破循环依赖 + private KeyboardThemePurchaseService purchaseService; @Override - public List selectThemesByStyle(Long themeStyle) { + public List selectThemesByStyle(Long themeStyle, Long userId) { + List themesList; if (themeStyle == 9999) { - List themesList = this.lambdaQuery() + themesList = this.lambdaQuery() .eq(KeyboardThemes::getDeleted, false) .eq(KeyboardThemes::getThemeStatus, true) + .orderByAsc(KeyboardThemes::getSort) + .list(); + } else { + themesList = this.lambdaQuery() + .eq(KeyboardThemes::getDeleted, false) + .eq(KeyboardThemes::getThemeStatus, true) + .eq(KeyboardThemes::getThemeStyle, themeStyle) .list(); - return BeanUtil.copyToList(themesList, KeyboardThemesRespVO.class); } - List themesList = this.lambdaQuery() - .eq(KeyboardThemes::getDeleted, false) - .eq(KeyboardThemes::getThemeStatus, true) - .eq(KeyboardThemes::getThemeStyle, themeStyle) - .list(); - return BeanUtil.copyToList(themesList, KeyboardThemesRespVO.class); + + Set purchasedThemeIds = purchaseService.lambdaQuery() + .eq(KeyboardThemePurchase::getUserId, userId) + .eq(KeyboardThemePurchase::getPayStatus, (short) 1) + .list() + .stream() + .map(KeyboardThemePurchase::getThemeId) + .collect(Collectors.toSet()); + + return themesList.stream().map(theme -> { + KeyboardThemesRespVO vo = BeanUtil.copyProperties(theme, KeyboardThemesRespVO.class); + vo.setIsPurchased(purchasedThemeIds.contains(theme.getId())); + return vo; + }).collect(Collectors.toList()); } }