From 198650556fd72530e30307193c25862591150251 Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 17 Dec 2025 16:57:39 +0800 Subject: [PATCH] =?UTF-8?q?feat(themes):=20=E6=96=B0=E5=A2=9E=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E6=A8=A1=E7=B3=8A=E6=90=9C=E7=B4=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8F=8A=E9=89=B4=E6=9D=83=E6=94=BE=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持按名称模糊搜索主题,并标记用户已购状态;同步放开 /themes/search 无需登录访问 --- .../keyborad/config/SaTokenConfigure.java | 1 + .../keyborad/controller/ThemesController.java | 8 ++++++ .../service/KeyboardThemesService.java | 8 ++++++ .../impl/KeyboardThemesServiceImpl.java | 26 +++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index a91191b..fabce72 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -92,6 +92,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/themes/purchase/list", "/themes/detail", "/themes/recommended", + "/themes/search", "/user-themes/batch-delete", "/products/listByType", "/products/detail", diff --git a/src/main/java/com/yolo/keyborad/controller/ThemesController.java b/src/main/java/com/yolo/keyborad/controller/ThemesController.java index 0e6030a..db4074d 100644 --- a/src/main/java/com/yolo/keyborad/controller/ThemesController.java +++ b/src/main/java/com/yolo/keyborad/controller/ThemesController.java @@ -91,4 +91,12 @@ public class ThemesController { return ResultUtils.success(result); } + @GetMapping("/search") + @Operation(summary = "搜索主题", description = "根据主题名称模糊搜索主题") + public BaseResponse> searchThemes(@RequestParam String themeName) { + Long userId = StpUtil.getLoginIdAsLong(); + List result = themesService.searchThemesByName(themeName, userId); + return ResultUtils.success(result); + } + } diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java b/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java index 8e23099..6c2ffc3 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardThemesService.java @@ -36,4 +36,12 @@ public interface KeyboardThemesService extends IService{ */ List getRecommendedThemes(Long userId); + /** + * 根据主题名称模糊搜索主题 + * @param themeName 主题名称关键字 + * @param userId 用户ID + * @return 主题列表 + */ + List searchThemesByName(String themeName, 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 b0667d9..a18cd02 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardThemesServiceImpl.java @@ -157,4 +157,30 @@ public class KeyboardThemesServiceImpl extends ServiceImpl searchThemesByName(String themeName, Long userId) { + // 根据主题名称模糊搜索 + List themesList = this.lambdaQuery() + .eq(KeyboardThemes::getDeleted, false) + .eq(KeyboardThemes::getThemeStatus, true) + .like(KeyboardThemes::getThemeName, themeName) + .list(); + + // 查询用户已购买的主题ID集合 + Set purchasedThemeIds = purchaseService.lambdaQuery() + .eq(KeyboardThemePurchase::getUserId, userId) + .eq(KeyboardThemePurchase::getPayStatus, (short) 1) + .list() + .stream() + .map(KeyboardThemePurchase::getThemeId) + .collect(Collectors.toSet()); + + // 转换为VO并设置购买状态 + return themesList.stream().map(theme -> { + KeyboardThemesRespVO vo = BeanUtil.copyProperties(theme, KeyboardThemesRespVO.class); + vo.setIsPurchased(purchasedThemeIds.contains(theme.getId())); + return vo; + }).collect(Collectors.toList()); + } }