feat(source): 增强source关联关系的数据一致性校验

- 在SourceMapper中新增sourceExists方法,用于校验source是否存在
- 新增filterValidSourceRelations方法,过滤无效的source引用
- 在FaceServiceImpl中增强关联关系创建逻辑,防止重复和无效数据
- 在VideoPieceGetter任务中增加source存在性校验,避免创建孤立关联- 添加详细的日志记录,便于追踪关联关系创建过程
-优化XML映射文件,支持新的校验和过滤查询逻辑
This commit is contained in:
2025-09-24 17:36:51 +08:00
parent b34f994298
commit 94d6b2f443
5 changed files with 79 additions and 14 deletions

View File

@@ -58,6 +58,10 @@ public interface SourceMapper {
List<MemberSourceEntity> filterExistingRelations(List<MemberSourceEntity> list);
boolean sourceExists(Long sourceId);
List<MemberSourceEntity> filterValidSourceRelations(List<MemberSourceEntity> list);
int updateRelation(MemberSourceEntity memberSourceEntity);
int freeRelations(List<Long> ids, int type);

View File

@@ -343,10 +343,15 @@ public class FaceServiceImpl implements FaceService {
handleVideoRecreation(scenicConfig, memberSourceEntityList, faceId,
face.getMemberId(), sampleListIds, isNew);
// 过滤已存在的关联关系,避免重复添加
List<MemberSourceEntity> filteredList = sourceMapper.filterExistingRelations(memberSourceEntityList);
if (!filteredList.isEmpty()) {
sourceMapper.addRelations(filteredList);
// 过滤已存在的关联关系和无效的source引用,防止数据不一致
List<MemberSourceEntity> existingFiltered = sourceMapper.filterExistingRelations(memberSourceEntityList);
List<MemberSourceEntity> validFiltered = sourceMapper.filterValidSourceRelations(existingFiltered);
if (!validFiltered.isEmpty()) {
sourceMapper.addRelations(validFiltered);
log.debug("创建关联关系: faceId={}, 原始数量={}, 过滤后数量={}",
faceId, memberSourceEntityList.size(), validFiltered.size());
} else {
log.warn("没有有效的关联关系可创建: faceId={}, 原始数量={}", faceId, memberSourceEntityList.size());
}
memberRelationRepository.clearSCacheByFace(faceId);
taskTaskService.autoCreateTaskByFaceId(faceId);
@@ -1118,10 +1123,15 @@ public class FaceServiceImpl implements FaceService {
handleVideoRecreation(scenicConfig, memberSourceEntityList, faceId,
face.getMemberId(), sampleListIds, false);
// 过滤已存在的关联关系,避免重复添加
List<MemberSourceEntity> filteredList = sourceMapper.filterExistingRelations(memberSourceEntityList);
if (!filteredList.isEmpty()) {
sourceMapper.addRelations(filteredList);
// 过滤已存在的关联关系和无效的source引用,防止数据不一致
List<MemberSourceEntity> existingFiltered = sourceMapper.filterExistingRelations(memberSourceEntityList);
List<MemberSourceEntity> validFiltered = sourceMapper.filterValidSourceRelations(existingFiltered);
if (!validFiltered.isEmpty()) {
sourceMapper.addRelations(validFiltered);
log.debug("创建关联关系: faceId={}, 原始数量={}, 过滤后数量={}",
faceId, memberSourceEntityList.size(), validFiltered.size());
} else {
log.warn("没有有效的关联关系可创建: faceId={}, 原始数量={}", faceId, memberSourceEntityList.size());
}
memberRelationRepository.clearSCacheByFace(faceId);
taskTaskService.autoCreateTaskByFaceId(faceId);

View File

@@ -153,10 +153,15 @@ public class TaskFaceServiceImpl implements TaskFaceService {
memberSourceEntity.setIsBuy(0);
}
}
// 过滤已存在的关联关系,避免重复添加
List<MemberSourceEntity> filteredList = sourceMapper.filterExistingRelations(memberSourceEntityList);
if (!filteredList.isEmpty()) {
sourceMapper.addRelations(filteredList);
// 过滤已存在的关联关系和无效的source引用,防止数据不一致
List<MemberSourceEntity> existingFiltered = sourceMapper.filterExistingRelations(memberSourceEntityList);
List<MemberSourceEntity> validFiltered = sourceMapper.filterValidSourceRelations(existingFiltered);
if (!validFiltered.isEmpty()) {
sourceMapper.addRelations(validFiltered);
log.debug("创建关联关系: faceId={}, 原始数量={}, 过滤后数量={}",
faceId, memberSourceEntityList.size(), validFiltered.size());
} else {
log.warn("没有有效的关联关系可创建: faceId={}, 原始数量={}", faceId, memberSourceEntityList.size());
}
memberRelationRepository.clearSCacheByFace(faceId);
VideoPieceGetter.Task task = new VideoPieceGetter.Task();

View File

@@ -355,7 +355,13 @@ public class VideoPieceGetter {
&& memberSourceEntity.getFaceId().equals(videoSource.getFaceId());
});
if (!anyMatch) {
sourceMapper.addRelation(videoSource);
// 验证source是否存在,防止创建孤立的关联关系
if (sourceMapper.sourceExists(videoSource.getSourceId())) {
sourceMapper.addRelation(videoSource);
} else {
log.warn("尝试创建关联关系但source不存在: sourceId={}, faceId={}, memberId={}",
videoSource.getSourceId(), videoSource.getFaceId(), videoSource.getMemberId());
}
}
memberRelationRepository.clearSCacheByFace(task.faceId);
}
@@ -395,7 +401,13 @@ public class VideoPieceGetter {
&& memberSourceEntity.getFaceId().equals(videoSource.getFaceId());
});
if (!anyMatch) {
sourceMapper.addRelation(videoSource);
// 验证source是否存在,防止创建孤立的关联关系
if (sourceMapper.sourceExists(videoSource.getSourceId())) {
sourceMapper.addRelation(videoSource);
} else {
log.warn("尝试创建关联关系但source不存在: sourceId={}, faceId={}, memberId={}",
videoSource.getSourceId(), videoSource.getFaceId(), videoSource.getMemberId());
}
}
memberRelationRepository.clearSCacheByFace(task.faceId);
}