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 cn.hutool.core.date.DateUtil;
|
||||||
import com.ycwl.basic.integration.scenic.dto.scenic.ScenicV2DTO;
|
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.PuzzleGenerateRequest;
|
||||||
import com.ycwl.basic.puzzle.dto.PuzzleGenerateResponse;
|
import com.ycwl.basic.puzzle.dto.PuzzleGenerateResponse;
|
||||||
import com.ycwl.basic.puzzle.dto.PuzzleTemplateDTO;
|
import com.ycwl.basic.puzzle.dto.PuzzleTemplateDTO;
|
||||||
@@ -44,6 +45,9 @@ public class PuzzleGenerationOrchestrator {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ScenicRepository scenicRepository;
|
private ScenicRepository scenicRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SourceMapper sourceMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步生成景区所有启用的拼图模板
|
* 异步生成景区所有启用的拼图模板
|
||||||
*
|
*
|
||||||
@@ -74,6 +78,11 @@ public class PuzzleGenerationOrchestrator {
|
|||||||
// 3. 准备公共动态数据
|
// 3. 准备公共动态数据
|
||||||
Map<String, String> baseDynamicData = buildBaseDynamicData(faceId, faceUrl, scenicBasic);
|
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. 使用虚拟线程池并行生成所有模板
|
// 4. 使用虚拟线程池并行生成所有模板
|
||||||
java.util.concurrent.atomic.AtomicInteger successCount = new java.util.concurrent.atomic.AtomicInteger(0);
|
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);
|
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("faceId", String.valueOf(faceId));
|
||||||
baseDynamicData.put("scenicName", scenicBasic.getName());
|
baseDynamicData.put("scenicName", scenicBasic.getName());
|
||||||
baseDynamicData.put("scenicText", scenicBasic.getName());
|
baseDynamicData.put("scenicText", scenicBasic.getName());
|
||||||
baseDynamicData.put("dateStr", DateUtil.format(new Date(), "yyyy.MM.dd"));
|
|
||||||
|
|
||||||
return baseDynamicData;
|
return baseDynamicData;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,13 @@ public interface SourceMapper {
|
|||||||
*/
|
*/
|
||||||
List<Long> getDeviceIdsByFaceId(Long faceId);
|
List<Long> getDeviceIdsByFaceId(Long faceId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取faceId关联的图片素材的最大创建时间
|
||||||
|
* @param faceId 人脸ID
|
||||||
|
* @return 最大创建时间,无记录时返回null
|
||||||
|
*/
|
||||||
|
Date getMaxCreateTimeByFaceId(Long faceId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据faceId和设备ID获取source
|
* 根据faceId和设备ID获取source
|
||||||
* @param faceId 人脸ID
|
* @param faceId 人脸ID
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import java.util.stream.Collectors;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class PuzzleDuplicationDetector {
|
public class PuzzleDuplicationDetector {
|
||||||
private final Set<String> skippedElementKeys = Set.of("dateStr");
|
private final Set<String> skippedElementKeys = Set.of();
|
||||||
private final PuzzleGenerationRecordMapper recordMapper;
|
private final PuzzleGenerationRecordMapper recordMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -405,7 +405,9 @@ public class FaceMatchingOrchestrator {
|
|||||||
baseDynamicData.put("faceId", String.valueOf(faceId));
|
baseDynamicData.put("faceId", String.valueOf(faceId));
|
||||||
baseDynamicData.put("scenicName", scenicBasic.getName());
|
baseDynamicData.put("scenicName", scenicBasic.getName());
|
||||||
baseDynamicData.put("scenicText", 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
|
templateList
|
||||||
.forEach(template -> {
|
.forEach(template -> {
|
||||||
|
|||||||
@@ -464,6 +464,15 @@
|
|||||||
ORDER BY s.device_id ASC
|
ORDER BY s.device_id ASC
|
||||||
</select>
|
</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 id="getSourceByFaceAndDeviceId" resultType="com.ycwl.basic.model.pc.source.entity.SourceEntity">
|
||||||
SELECT s.*
|
SELECT s.*
|
||||||
FROM source s
|
FROM source s
|
||||||
|
|||||||
Reference in New Issue
Block a user