feat(puzzle): 添加景区模板列表缓存功能

- 新增景区模板列表缓存KEY常量PUZZLE_TEMPLATES_BY_SCENIC_KEY
- 在清除模板缓存时同步清除对应景区的模板列表缓存
- 实现listTemplateByScenic方法根据景区ID获取启用模板列表并缓存
- 实现clearTemplateByScenicCache方法清除景区模板列表缓存
- 重构人脸匹配编排器使用新的缓存方法替代原有数据库查询
- 移除过期的redisTemplate依赖
This commit is contained in:
2026-01-07 15:03:34 +08:00
parent 917668da0c
commit 3291371dd7
2 changed files with 86 additions and 12 deletions

View File

@@ -6,6 +6,8 @@ import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
import com.ycwl.basic.puzzle.dto.PuzzleGenerateRequest;
import com.ycwl.basic.puzzle.dto.PuzzleGenerateResponse;
import com.ycwl.basic.puzzle.dto.PuzzleTemplateDTO;
import com.ycwl.basic.puzzle.entity.PuzzleTemplateEntity;
import com.ycwl.basic.puzzle.repository.PuzzleRepository;
import com.ycwl.basic.puzzle.service.IPuzzleGenerateService;
import com.ycwl.basic.puzzle.service.IPuzzleTemplateService;
@@ -102,9 +104,9 @@ public class FaceMatchingOrchestrator {
@Autowired
private IPuzzleGenerateService puzzleGenerateService;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Autowired
private FaceStatusManager faceStatusManager;
@Autowired
private PuzzleRepository puzzleRepository;
/**
* 编排人脸匹配的完整流程
@@ -364,17 +366,8 @@ public class FaceMatchingOrchestrator {
* @return
*/
private void asyncGeneratePuzzleTemplate(Long scenicId, Long faceId, Long memberId, String scene) {
if (redisTemplate.hasKey("puzzle_generated:face:" + faceId)) {
return;
}
redisTemplate.opsForValue().set(
"puzzle_generated:face:" + faceId,
"1",
60 * 10, TimeUnit.SECONDS);
// 查询该景区所有启用状态的拼图模板
List<PuzzleTemplateDTO> templateList = puzzleTemplateService.listTemplates(
scenicId, null, 1); // 查询启用状态的模板
List<PuzzleTemplateEntity> templateList = puzzleRepository.listTemplateByScenic(scenicId); // 查询启用状态的模板
if (templateList == null || templateList.isEmpty()) {
log.debug("景区不存在启用的拼图模板,跳过生成: scenicId={}", scenicId);