You've already forked FrameTour-BE
feat(puzzle): 实现拼图生成去重机制
- 新增内容哈希计算逻辑,基于元素内容生成SHA256哈希用于去重判断 - 添加重复图片检测功能,当所有IMAGE元素使用相同URL时抛出异常 - 实现历史记录查询接口,根据模板ID、内容哈希和景区ID查找重复记录 - 扩展生成响应对象,增加isDuplicate和originalRecordId字段标识复用情况 - 更新数据库实体和Mapper,新增content_hash、is_duplicate等字段支持去重 - 添加完整的单元测试和集成测试,覆盖去重检测、哈希计算等核心逻辑 - 引入DuplicateImageException和PuzzleBizException异常类完善错误处理
This commit is contained in:
@@ -12,6 +12,9 @@
|
||||
<result column="face_id" property="faceId"/>
|
||||
<result column="business_type" property="businessType"/>
|
||||
<result column="generation_params" property="generationParams"/>
|
||||
<result column="content_hash" property="contentHash"/>
|
||||
<result column="is_duplicate" property="isDuplicate"/>
|
||||
<result column="original_record_id" property="originalRecordId"/>
|
||||
<result column="result_image_url" property="resultImageUrl"/>
|
||||
<result column="result_file_size" property="resultFileSize"/>
|
||||
<result column="result_width" property="resultWidth"/>
|
||||
@@ -30,7 +33,8 @@
|
||||
<!-- 基础列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, template_id, template_code, user_id, face_id, business_type,
|
||||
generation_params, result_image_url, result_file_size, result_width, result_height,
|
||||
generation_params, content_hash, is_duplicate, original_record_id,
|
||||
result_image_url, result_file_size, result_width, result_height,
|
||||
status, error_message, generation_duration, retry_count,
|
||||
scenic_id, client_ip, user_agent, create_time, update_time
|
||||
</sql>
|
||||
@@ -74,12 +78,14 @@
|
||||
useGeneratedKeys="true" keyProperty="id">
|
||||
INSERT INTO puzzle_generation_record (
|
||||
template_id, template_code, user_id, face_id, business_type,
|
||||
generation_params, result_image_url, result_file_size, result_width, result_height,
|
||||
generation_params, content_hash, is_duplicate, original_record_id,
|
||||
result_image_url, result_file_size, result_width, result_height,
|
||||
status, error_message, generation_duration, retry_count,
|
||||
scenic_id, client_ip, user_agent, create_time, update_time
|
||||
) VALUES (
|
||||
#{templateId}, #{templateCode}, #{userId}, #{faceId}, #{businessType},
|
||||
#{generationParams}, #{resultImageUrl}, #{resultFileSize}, #{resultWidth}, #{resultHeight},
|
||||
#{generationParams}, #{contentHash}, #{isDuplicate}, #{originalRecordId},
|
||||
#{resultImageUrl}, #{resultFileSize}, #{resultWidth}, #{resultHeight},
|
||||
#{status}, #{errorMessage}, #{generationDuration}, #{retryCount},
|
||||
#{scenicId}, #{clientIp}, #{userAgent}, NOW(), NOW()
|
||||
)
|
||||
@@ -124,4 +130,17 @@
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<!-- 根据内容哈希查询历史记录(用于去重) -->
|
||||
<select id="findByContentHash" resultMap="BaseResultMap">
|
||||
SELECT <include refid="Base_Column_List"/>
|
||||
FROM puzzle_generation_record
|
||||
WHERE template_id = #{templateId}
|
||||
AND content_hash = #{contentHash}
|
||||
AND scenic_id = #{scenicId}
|
||||
AND status = 1
|
||||
AND is_duplicate = 0
|
||||
ORDER BY create_time DESC
|
||||
LIMIT 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user