diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index deed191..d8a2532 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -89,6 +89,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/themes/listByStyle", "/wallet/balance", "/themes/purchase", + "/themes/purchased", "/themes/purchase/list" }; } diff --git a/src/main/java/com/yolo/keyborad/controller/ThemesController.java b/src/main/java/com/yolo/keyborad/controller/ThemesController.java index 298b72b..8c29804 100644 --- a/src/main/java/com/yolo/keyborad/controller/ThemesController.java +++ b/src/main/java/com/yolo/keyborad/controller/ThemesController.java @@ -67,4 +67,12 @@ public class ThemesController { return ResultUtils.success(result); } + @GetMapping("/purchased") + @Operation(summary = "查询已购买的主题", description = "查询当前用户已购买的主题列表") + public BaseResponse> getPurchasedThemes() { + Long userId = StpUtil.getLoginIdAsLong(); + List result = themePurchaseService.getUserPurchasedThemes(userId); + return ResultUtils.success(result); + } + } 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 11fe630..8efed29 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 @@ -48,6 +48,8 @@ public class KeyboardThemesRespVO { @Schema(description = "主题风格") private Long themeStyle; + @Schema(description = "预览图") + private String themePreviewImageUrl; /** * 主题状态 */ diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java b/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java index 6b385c9..a9f2946 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardThemePurchaseService.java @@ -4,6 +4,7 @@ import com.yolo.keyborad.model.entity.KeyboardThemePurchase; import com.baomidou.mybatisplus.extension.service.IService; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseListRespVO; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseRespVO; +import com.yolo.keyborad.model.vo.themes.KeyboardThemesRespVO; import java.util.List; @@ -23,4 +24,9 @@ public interface KeyboardThemePurchaseService extends IService getUserPurchaseList(Long userId); + + /** + * 查询用户已购买的主题列表 + */ + List getUserPurchasedThemes(Long userId); } diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java index 12cb581..6b4f58a 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemePurchaseServiceImpl.java @@ -7,6 +7,7 @@ import com.yolo.keyborad.model.entity.KeyboardUserWallet; import com.yolo.keyborad.model.entity.KeyboardWalletTransaction; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseListRespVO; import com.yolo.keyborad.model.vo.purchase.ThemePurchaseRespVO; +import com.yolo.keyborad.model.vo.themes.KeyboardThemesRespVO; import com.yolo.keyborad.service.KeyboardThemesService; import com.yolo.keyborad.service.KeyboardUserWalletService; import com.yolo.keyborad.service.KeyboardWalletTransactionService; @@ -181,4 +182,52 @@ public class KeyboardThemePurchaseServiceImpl extends ServiceImpl getUserPurchasedThemes(Long userId) { + // 1. 查询用户所有已支付的主题ID列表 + List themeIds = this.lambdaQuery() + .eq(KeyboardThemePurchase::getUserId, userId) // 根据用户ID筛选 + .eq(KeyboardThemePurchase::getPayStatus, (short) 1) // 支付状态为1(已支付) + .list() + .stream() + .map(KeyboardThemePurchase::getThemeId) // 提取主题ID + .distinct() // 去重 + .collect(java.util.stream.Collectors.toList()); + + // 2. 如果没有购买记录,返回空列表 + if (themeIds.isEmpty()) { + return java.util.Collections.emptyList(); + } + + // 3. 根据主题ID列表查询主题详情,并转换为响应VO对象 + return themesService.lambdaQuery() + .in(KeyboardThemes::getId, themeIds) // 根据主题ID列表查询 + .eq(KeyboardThemes::getDeleted, false) // 排除已删除的主题 + .list() + .stream() + .map(theme -> { + // 创建响应VO对象并填充主题信息 + KeyboardThemesRespVO vo = new KeyboardThemesRespVO(); + vo.setId(theme.getId()); // 主题ID + vo.setThemePreviewImageUrl(theme.getThemePreviewImageUrl()); // 主题预览图片 + vo.setThemeName(theme.getThemeName()); // 主题名称 + vo.setThemePrice(theme.getThemePrice()); // 主题价格 + vo.setThemeTag(theme.getThemeTag()); // 主题标签 + vo.setThemeDownload(theme.getThemeDownload()); // 下载地址 + vo.setThemeStyle(theme.getThemeStyle()); // 主题风格 + vo.setThemeStatus(theme.getThemeStatus()); // 主题状态 + vo.setThemePurchasesNumber(theme.getThemePurchasesNumber()); // 购买次数 + vo.setSort(theme.getSort()); // 排序值 + vo.setIsFree(theme.getIsFree()); // 是否免费 + return vo; + }).collect(java.util.stream.Collectors.toList()); + } }