feat(puzzle): 添加拼图生成记录检查逻辑

- 引入 PuzzleGenerationRecordEntity 和 PuzzleGenerationRecordMapper
- 在人脸匹配编排流程中查询已有拼图生成记录
- 增加模板重复生成判断逻辑,避免重复处理
- 跳过已生成模板并记录日志提示
This commit is contained in:
2025-11-20 17:33:51 +08:00
parent 8991d68673
commit 8c76c85ae2

View File

@@ -4,6 +4,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.PuzzleGenerationRecordEntity;
import com.ycwl.basic.puzzle.mapper.PuzzleGenerationRecordMapper;
import com.ycwl.basic.puzzle.service.IPuzzleGenerateService;
import com.ycwl.basic.puzzle.service.IPuzzleTemplateService;
@@ -93,6 +95,8 @@ public class FaceMatchingOrchestrator {
private IPuzzleTemplateService puzzleTemplateService;
@Autowired
private IPuzzleGenerateService puzzleGenerateService;
@Autowired
private PuzzleGenerationRecordMapper puzzleGenerationRecordMapper;
/**
* 编排人脸匹配的完整流程
@@ -365,6 +369,8 @@ public class FaceMatchingOrchestrator {
return;
}
ScenicV2DTO scenicBasic = scenicRepository.getScenicBasic(face.getScenicId());
List<PuzzleGenerationRecordEntity> records = puzzleGenerationRecordMapper.listByFaceId(faceId);
// 准备公共动态数据
Map<String, String> baseDynamicData = new HashMap<>();
if (face.getFaceUrl() != null) {
@@ -381,6 +387,11 @@ public class FaceMatchingOrchestrator {
int failCount = 0;
for (PuzzleTemplateDTO template : templateList) {
try {
boolean anyMatch = records.stream().anyMatch(record -> record.getTemplateCode().equals(template.getCode()));
if (anyMatch) {
log.info("模板已生成,跳过");
continue;
}
log.info("开始生成拼图: scenicId={}, templateCode={}, templateName={}",
scenicId, template.getCode(), template.getName());