feat(source): 添加过滤已存在关联关系功能

- 在SourceMapper中新增filterExistingRelations方法
- 修改FaceServiceImpl中的关联关系保存逻辑
- 修改TaskFaceServiceImpl中的关联关系保存逻辑
- 修改VideoPieceGetter中的关联关系检查逻辑
- 在SourceMapper.xml中添加filterExistingRelations的SQL实现
This commit is contained in:
2025-09-24 17:16:12 +08:00
parent 7728f4424f
commit b34f994298
5 changed files with 86 additions and 25 deletions

View File

@@ -334,6 +334,7 @@ public class VideoPieceGetter {
sourceEntity.setDeviceId(deviceId);
sourceEntity.setType(1);
if (task.memberId != null && task.faceId != null) {
List<MemberSourceEntity> memberSourceEntities = memberRelationRepository.listSourceByFaceRelation(task.faceId, 1);
MemberSourceEntity videoSource = new MemberSourceEntity();
videoSource.setMemberId(task.getMemberId());
videoSource.setType(1);
@@ -348,7 +349,14 @@ public class VideoPieceGetter {
} else {
videoSource.setIsBuy(0);
}
sourceMapper.addRelation(videoSource);
boolean anyMatch = memberSourceEntities.stream().anyMatch(memberSourceEntity -> {
return memberSourceEntity.getSourceId().equals(videoSource.getSourceId())
&& memberSourceEntity.getType().equals(videoSource.getType())
&& memberSourceEntity.getFaceId().equals(videoSource.getFaceId());
});
if (!anyMatch) {
sourceMapper.addRelation(videoSource);
}
memberRelationRepository.clearSCacheByFace(task.faceId);
}
sourceMapper.add(sourceEntity);
@@ -364,27 +372,32 @@ public class VideoPieceGetter {
} else {
// 有原视频
if (task.memberId != null && task.faceId != null) {
int count = sourceMapper.hasRelationTo(task.getMemberId(), source.getId(), 1);
if (count <= 0) {
// 没有关联
IsBuyRespVO isBuy = orderBiz.isBuy(task.getMemberId(), deviceV2.getScenicId(), 1, task.getFaceId());
MemberSourceEntity videoSource = new MemberSourceEntity();
videoSource.setId(SnowFlakeUtil.getLongId());
videoSource.setScenicId(deviceV2.getScenicId());
videoSource.setFaceId(task.getFaceId());
videoSource.setMemberId(task.getMemberId());
videoSource.setType(1);
if (isBuy.isBuy()) { // 如果用户买过
videoSource.setIsBuy(1);
} else if (isBuy.isFree()) { // 全免费逻辑
videoSource.setIsBuy(1);
} else {
videoSource.setIsBuy(0);
}
videoSource.setSourceId(source.getId());
sourceMapper.addRelation(videoSource);
memberRelationRepository.clearSCacheByFace(task.faceId);
List<MemberSourceEntity> memberSourceEntities = memberRelationRepository.listSourceByFaceRelation(task.faceId, 1);
IsBuyRespVO isBuy = orderBiz.isBuy(task.getMemberId(), deviceV2.getScenicId(), 1, task.getFaceId());
MemberSourceEntity videoSource = new MemberSourceEntity();
videoSource.setId(SnowFlakeUtil.getLongId());
videoSource.setScenicId(deviceV2.getScenicId());
videoSource.setFaceId(task.getFaceId());
videoSource.setMemberId(task.getMemberId());
videoSource.setType(1);
if (isBuy.isBuy()) { // 如果用户买过
videoSource.setIsBuy(1);
} else if (isBuy.isFree()) { // 全免费逻辑
videoSource.setIsBuy(1);
} else {
videoSource.setIsBuy(0);
}
videoSource.setSourceId(source.getId());
// 没有关联
boolean anyMatch = memberSourceEntities.stream().anyMatch(memberSourceEntity -> {
return memberSourceEntity.getSourceId().equals(videoSource.getSourceId())
&& memberSourceEntity.getType().equals(videoSource.getType())
&& memberSourceEntity.getFaceId().equals(videoSource.getFaceId());
});
if (!anyMatch) {
sourceMapper.addRelation(videoSource);
}
memberRelationRepository.clearSCacheByFace(task.faceId);
}
}
return true;