From 745411161518dc75e2d6842c6035fd1de0dca995 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 20 Feb 2026 20:11:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(puzzle):=20=E6=9B=B4=E6=96=B0=E6=8B=BC?= =?UTF-8?q?=E5=9B=BE=E7=94=9F=E6=88=90=E4=B8=AD=E7=9A=84=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在PuzzleGenerationOrchestrator中注入SourceMapper依赖 - 新增getMaxCreateTimeByFaceId方法查询图片素材最大创建时间 - 修改拼图模板生成逻辑使用图片素材最大创建时间作为dateStr值 - 移除硬编码当前日期,改为基于实际素材时间 - 更新FaceMatchingOrchestrator中相同的日期处理逻辑 - 从跳过重复检测的元素键集合中移除dateStr字段 --- .../pipeline/helper/PuzzleGenerationOrchestrator.java | 10 +++++++++- src/main/java/com/ycwl/basic/mapper/SourceMapper.java | 7 +++++++ .../basic/puzzle/util/PuzzleDuplicationDetector.java | 2 +- .../pc/orchestrator/FaceMatchingOrchestrator.java | 4 +++- src/main/resources/mapper/SourceMapper.xml | 9 +++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/ycwl/basic/face/pipeline/helper/PuzzleGenerationOrchestrator.java b/src/main/java/com/ycwl/basic/face/pipeline/helper/PuzzleGenerationOrchestrator.java index 6682bce1..0d02ee8a 100644 --- a/src/main/java/com/ycwl/basic/face/pipeline/helper/PuzzleGenerationOrchestrator.java +++ b/src/main/java/com/ycwl/basic/face/pipeline/helper/PuzzleGenerationOrchestrator.java @@ -2,6 +2,7 @@ package com.ycwl.basic.face.pipeline.helper; import cn.hutool.core.date.DateUtil; import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO; +import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.puzzle.dto.PuzzleGenerateRequest; import com.ycwl.basic.puzzle.dto.PuzzleGenerateResponse; import com.ycwl.basic.puzzle.dto.PuzzleTemplateDTO; @@ -44,6 +45,9 @@ public class PuzzleGenerationOrchestrator { @Autowired private ScenicRepository scenicRepository; + @Autowired + private SourceMapper sourceMapper; + /** * 异步生成景区所有启用的拼图模板 * @@ -74,6 +78,11 @@ public class PuzzleGenerationOrchestrator { // 3. 准备公共动态数据 Map baseDynamicData = buildBaseDynamicData(faceId, faceUrl, scenicBasic); + // 4. 设置dateStr为图片素材的最大创建时间 + Date maxCreateTime = sourceMapper.getMaxCreateTimeByFaceId(faceId); + baseDynamicData.put("dateStr", DateUtil.format( + maxCreateTime != null ? maxCreateTime : new Date(), "yyyy.MM.dd")); + // 4. 使用虚拟线程池并行生成所有模板 java.util.concurrent.atomic.AtomicInteger successCount = new java.util.concurrent.atomic.AtomicInteger(0); java.util.concurrent.atomic.AtomicInteger failCount = new java.util.concurrent.atomic.AtomicInteger(0); @@ -121,7 +130,6 @@ public class PuzzleGenerationOrchestrator { baseDynamicData.put("faceId", String.valueOf(faceId)); baseDynamicData.put("scenicName", scenicBasic.getName()); baseDynamicData.put("scenicText", scenicBasic.getName()); - baseDynamicData.put("dateStr", DateUtil.format(new Date(), "yyyy.MM.dd")); return baseDynamicData; } diff --git a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java index 5411b9d0..2ff2c7b1 100644 --- a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java @@ -143,6 +143,13 @@ public interface SourceMapper { */ List getDeviceIdsByFaceId(Long faceId); + /** + * 获取faceId关联的图片素材的最大创建时间 + * @param faceId 人脸ID + * @return 最大创建时间,无记录时返回null + */ + Date getMaxCreateTimeByFaceId(Long faceId); + /** * 根据faceId和设备ID获取source * @param faceId 人脸ID diff --git a/src/main/java/com/ycwl/basic/puzzle/util/PuzzleDuplicationDetector.java b/src/main/java/com/ycwl/basic/puzzle/util/PuzzleDuplicationDetector.java index 802d555e..2464553f 100644 --- a/src/main/java/com/ycwl/basic/puzzle/util/PuzzleDuplicationDetector.java +++ b/src/main/java/com/ycwl/basic/puzzle/util/PuzzleDuplicationDetector.java @@ -25,7 +25,7 @@ import java.util.stream.Collectors; @Component @RequiredArgsConstructor public class PuzzleDuplicationDetector { - private final Set skippedElementKeys = Set.of("dateStr"); + private final Set skippedElementKeys = Set.of(); private final PuzzleGenerationRecordMapper recordMapper; /** diff --git a/src/main/java/com/ycwl/basic/service/pc/orchestrator/FaceMatchingOrchestrator.java b/src/main/java/com/ycwl/basic/service/pc/orchestrator/FaceMatchingOrchestrator.java index 7c0f12a0..fce5dddf 100644 --- a/src/main/java/com/ycwl/basic/service/pc/orchestrator/FaceMatchingOrchestrator.java +++ b/src/main/java/com/ycwl/basic/service/pc/orchestrator/FaceMatchingOrchestrator.java @@ -405,7 +405,9 @@ public class FaceMatchingOrchestrator { baseDynamicData.put("faceId", String.valueOf(faceId)); baseDynamicData.put("scenicName", scenicBasic.getName()); baseDynamicData.put("scenicText", scenicBasic.getName()); - baseDynamicData.put("dateStr", DateUtil.format(new Date(), "yyyy.MM.dd")); + Date maxCreateTime = sourceMapper.getMaxCreateTimeByFaceId(faceId); + baseDynamicData.put("dateStr", DateUtil.format( + maxCreateTime != null ? maxCreateTime : new Date(), "yyyy.MM.dd")); templateList .forEach(template -> { diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index 572f9e0f..687c069e 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -464,6 +464,15 @@ ORDER BY s.device_id ASC + +