feat(puzzle): 实现拼图生成去重机制

- 新增内容哈希计算逻辑,基于元素内容生成SHA256哈希用于去重判断
- 添加重复图片检测功能,当所有IMAGE元素使用相同URL时抛出异常
- 实现历史记录查询接口,根据模板ID、内容哈希和景区ID查找重复记录
- 扩展生成响应对象,增加isDuplicate和originalRecordId字段标识复用情况
- 更新数据库实体和Mapper,新增content_hash、is_duplicate等字段支持去重
- 添加完整的单元测试和集成测试,覆盖去重检测、哈希计算等核心逻辑
- 引入DuplicateImageException和PuzzleBizException异常类完善错误处理
This commit is contained in:
2025-11-21 11:02:43 +08:00
parent 6ef710201c
commit 0db713b4a8
10 changed files with 890 additions and 11 deletions

View File

@@ -0,0 +1,49 @@
package com.ycwl.basic.puzzle.exception;
/**
* 重复图片异常
* 当所有图片元素使用相同URL时抛出此异常
*
* @author Claude
* @since 2025-01-21
*/
public class DuplicateImageException extends PuzzleBizException {
private static final String DEFAULT_MESSAGE_TEMPLATE = "检测到所有图片元素使用相同URL,拒绝生成: %s (元素数量: %d)";
private final String duplicateImageUrl;
private final int elementCount;
/**
* 构造函数
*
* @param duplicateImageUrl 重复的图片URL
* @param elementCount 使用相同URL的元素数量
*/
public DuplicateImageException(String duplicateImageUrl, int elementCount) {
super(String.format(DEFAULT_MESSAGE_TEMPLATE, duplicateImageUrl, elementCount));
this.duplicateImageUrl = duplicateImageUrl;
this.elementCount = elementCount;
}
/**
* 构造函数(带自定义消息)
*
* @param message 自定义错误消息
* @param duplicateImageUrl 重复的图片URL
* @param elementCount 元素数量
*/
public DuplicateImageException(String message, String duplicateImageUrl, int elementCount) {
super(message);
this.duplicateImageUrl = duplicateImageUrl;
this.elementCount = elementCount;
}
public String getDuplicateImageUrl() {
return duplicateImageUrl;
}
public int getElementCount() {
return elementCount;
}
}

View File

@@ -0,0 +1,7 @@
package com.ycwl.basic.puzzle.exception;
public class PuzzleBizException extends RuntimeException {
public PuzzleBizException(String message) {
super(message);
}
}