You've already forked FrameTour-BE
feat(puzzle): 更新拼图生成中的日期显示逻辑
- 在PuzzleGenerationOrchestrator中注入SourceMapper依赖 - 新增getMaxCreateTimeByFaceId方法查询图片素材最大创建时间 - 修改拼图模板生成逻辑使用图片素材最大创建时间作为dateStr值 - 移除硬编码当前日期,改为基于实际素材时间 - 更新FaceMatchingOrchestrator中相同的日期处理逻辑 - 从跳过重复检测的元素键集合中移除dateStr字段
This commit is contained in:
@@ -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<String, String> 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;
|
||||
}
|
||||
|
||||
@@ -143,6 +143,13 @@ public interface SourceMapper {
|
||||
*/
|
||||
List<Long> getDeviceIdsByFaceId(Long faceId);
|
||||
|
||||
/**
|
||||
* 获取faceId关联的图片素材的最大创建时间
|
||||
* @param faceId 人脸ID
|
||||
* @return 最大创建时间,无记录时返回null
|
||||
*/
|
||||
Date getMaxCreateTimeByFaceId(Long faceId);
|
||||
|
||||
/**
|
||||
* 根据faceId和设备ID获取source
|
||||
* @param faceId 人脸ID
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class PuzzleDuplicationDetector {
|
||||
private final Set<String> skippedElementKeys = Set.of("dateStr");
|
||||
private final Set<String> skippedElementKeys = Set.of();
|
||||
private final PuzzleGenerationRecordMapper recordMapper;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 -> {
|
||||
|
||||
@@ -464,6 +464,15 @@
|
||||
ORDER BY s.device_id ASC
|
||||
</select>
|
||||
|
||||
<select id="getMaxCreateTimeByFaceId" resultType="java.util.Date">
|
||||
SELECT MAX(s.create_time)
|
||||
FROM member_source ms
|
||||
INNER JOIN source s ON ms.source_id = s.id
|
||||
WHERE ms.face_id = #{faceId}
|
||||
AND s.type = 2
|
||||
AND ms.deleted = 0
|
||||
</select>
|
||||
|
||||
<select id="getSourceByFaceAndDeviceId" resultType="com.ycwl.basic.model.pc.source.entity.SourceEntity">
|
||||
SELECT s.*
|
||||
FROM source s
|
||||
|
||||
Reference in New Issue
Block a user