From b34f9942989272f0ee2d47f2fe34540b2cbd2e15 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 24 Sep 2025 17:16:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(source):=20=E6=B7=BB=E5=8A=A0=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=B7=B2=E5=AD=98=E5=9C=A8=E5=85=B3=E8=81=94=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在SourceMapper中新增filterExistingRelations方法 - 修改FaceServiceImpl中的关联关系保存逻辑 - 修改TaskFaceServiceImpl中的关联关系保存逻辑 - 修改VideoPieceGetter中的关联关系检查逻辑 - 在SourceMapper.xml中添加filterExistingRelations的SQL实现 --- .../com/ycwl/basic/mapper/SourceMapper.java | 2 + .../service/pc/impl/FaceServiceImpl.java | 13 ++++- .../task/impl/TaskFaceServiceImpl.java | 6 +- .../com/ycwl/basic/task/VideoPieceGetter.java | 55 ++++++++++++------- src/main/resources/mapper/SourceMapper.xml | 35 ++++++++++++ 5 files changed, 86 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java index 93d296b5..96c16aaa 100644 --- a/src/main/java/com/ycwl/basic/mapper/SourceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/SourceMapper.java @@ -56,6 +56,8 @@ public interface SourceMapper { int addRelations(List list); + List filterExistingRelations(List list); + int updateRelation(MemberSourceEntity memberSourceEntity); int freeRelations(List ids, int type); diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java index c9396374..b449057f 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceServiceImpl.java @@ -343,8 +343,11 @@ public class FaceServiceImpl implements FaceService { handleVideoRecreation(scenicConfig, memberSourceEntityList, faceId, face.getMemberId(), sampleListIds, isNew); - // 保存关联关系并创建任务 - sourceMapper.addRelations(memberSourceEntityList); + // 过滤已存在的关联关系,避免重复添加 + List filteredList = sourceMapper.filterExistingRelations(memberSourceEntityList); + if (!filteredList.isEmpty()) { + sourceMapper.addRelations(filteredList); + } memberRelationRepository.clearSCacheByFace(faceId); taskTaskService.autoCreateTaskByFaceId(faceId); @@ -1115,7 +1118,11 @@ public class FaceServiceImpl implements FaceService { handleVideoRecreation(scenicConfig, memberSourceEntityList, faceId, face.getMemberId(), sampleListIds, false); - sourceMapper.addRelations(memberSourceEntityList); + // 过滤已存在的关联关系,避免重复添加 + List filteredList = sourceMapper.filterExistingRelations(memberSourceEntityList); + if (!filteredList.isEmpty()) { + sourceMapper.addRelations(filteredList); + } memberRelationRepository.clearSCacheByFace(faceId); taskTaskService.autoCreateTaskByFaceId(faceId); diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java index e7b26c0a..ff2f27f8 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskFaceServiceImpl.java @@ -153,7 +153,11 @@ public class TaskFaceServiceImpl implements TaskFaceService { memberSourceEntity.setIsBuy(0); } } - sourceMapper.addRelations(memberSourceEntityList); + // 过滤已存在的关联关系,避免重复添加 + List filteredList = sourceMapper.filterExistingRelations(memberSourceEntityList); + if (!filteredList.isEmpty()) { + sourceMapper.addRelations(filteredList); + } memberRelationRepository.clearSCacheByFace(faceId); VideoPieceGetter.Task task = new VideoPieceGetter.Task(); task.faceId = faceEntity.getId(); diff --git a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java index 4fa46afd..ca84739e 100644 --- a/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java +++ b/src/main/java/com/ycwl/basic/task/VideoPieceGetter.java @@ -334,6 +334,7 @@ public class VideoPieceGetter { sourceEntity.setDeviceId(deviceId); sourceEntity.setType(1); if (task.memberId != null && task.faceId != null) { + List 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 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; diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index bdfbb188..cba96a22 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -16,6 +16,41 @@ (#{item.scenicId}, #{item.faceId}, #{item.memberId}, #{item.sourceId}, #{item.isBuy}, #{item.type}, #{item.orderId}, #{item.isFree}) + insert source_watermark(source_id, face_id, watermark_type, watermark_url) values (#{sourceId}, #{faceId}, #{type}, #{url})