feat(puzzle): 实现拼图模板缓存功能

- 集成 PuzzleRepository 缓存层替代直接数据库查询
- 在 PriceBiz 中使用缓存查询拼图模板数据
- 在 AppTemplateController 中添加景区模板封面URL批量获取接口
- 在 PuzzleTemplateServiceImpl 中实现模板增改时的缓存清理逻辑
- 在 FaceServiceImpl 中使用缓存查询拼图模板
- 优化模板查询性能并减少数据库压力
This commit is contained in:
2026-01-15 17:01:17 +08:00
parent 2fb6aa42cf
commit 63d31d69a9
4 changed files with 67 additions and 8 deletions

View File

@@ -1,8 +1,8 @@
package com.ycwl.basic.controller.mobile;
import com.ycwl.basic.mapper.TemplateMapper;
import com.ycwl.basic.model.pc.template.entity.TemplateEntity;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.puzzle.entity.PuzzleTemplateEntity;
import com.ycwl.basic.puzzle.repository.PuzzleRepository;
import com.ycwl.basic.repository.TemplateRepository;
import com.ycwl.basic.utils.ApiResponse;
import lombok.RequiredArgsConstructor;
@@ -11,6 +11,10 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 移动端模板接口
*/
@@ -20,6 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
public class AppTemplateController {
private final TemplateRepository templateRepository;
private final PuzzleRepository puzzleRepository;
/**
* 根据模板ID获取封面URL
@@ -45,4 +50,37 @@ public class AppTemplateController {
return ApiResponse.success(coverUrl);
}
/**
* 根据景区ID获取所有模板封面URL列表(用于前端预缓存)
*
* @param scenicId 景区ID
* @return 模板封面URL列表
*/
@GetMapping("/scenic/{scenicId}/covers")
public ApiResponse<List<String>> getScenicTemplateCoverUrls(@PathVariable("scenicId") Long scenicId) {
if (scenicId == null) {
return ApiResponse.fail("景区ID不能为空");
}
List<String> coverUrls = new ArrayList<>();
// 获取普通模板封面
List<TemplateRespVO> templateList = templateRepository.getTemplateListByScenicId(scenicId);
templateList.stream()
.map(TemplateRespVO::getCoverUrl)
.filter(Objects::nonNull)
.filter(url -> !url.isEmpty())
.forEach(coverUrls::add);
// 获取拼图模板封面(使用缓存)
List<PuzzleTemplateEntity> puzzleTemplateList = puzzleRepository.listTemplateByScenic(scenicId);
puzzleTemplateList.stream()
.map(PuzzleTemplateEntity::getCoverImage)
.filter(Objects::nonNull)
.filter(url -> !url.isEmpty())
.forEach(coverUrls::add);
return ApiResponse.success(coverUrls);
}
}