From 78079b242ac26b182e31a4995d16829059eaa8e5 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 17 Jul 2025 17:45:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=9D=E5=A4=96=E6=9B=B4=E6=96=B0=E5=B0=91?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=9A=84relation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/pc/impl/FaceServiceImpl.java | 42 ++++++++++++++----- .../task/impl/TaskFaceServiceImpl.java | 30 ++++++------- .../ycwl/basic/task/DynamicTaskGenerator.java | 2 +- src/main/resources/mapper/SourceMapper.xml | 6 +-- 4 files changed, 51 insertions(+), 29 deletions(-) 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 5a47294..68a3a26 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 @@ -8,10 +8,7 @@ import com.ycwl.basic.biz.TemplateBiz; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.enums.StatisticEnum; import com.ycwl.basic.exception.BaseException; -import com.ycwl.basic.facebody.FaceBodyFactory; -import com.ycwl.basic.facebody.adapter.AliFaceBodyAdapter; import com.ycwl.basic.facebody.adapter.IFaceBodyAdapter; -import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.mapper.StatisticsMapper; import com.ycwl.basic.mapper.FaceMapper; @@ -21,6 +18,7 @@ import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.mobile.order.IsBuyRespVO; import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO; import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq; +import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity; import com.ycwl.basic.model.pc.face.entity.FaceEntity; import com.ycwl.basic.model.pc.face.req.FaceReqQuery; import com.ycwl.basic.model.pc.face.resp.FaceRespVO; @@ -34,6 +32,7 @@ import com.ycwl.basic.model.pc.task.entity.TaskEntity; import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity; import com.ycwl.basic.model.pc.video.entity.VideoEntity; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; +import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.repository.FaceRepository; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.VideoRepository; @@ -56,7 +55,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.Random; import java.util.UUID; @@ -101,6 +99,8 @@ public class FaceServiceImpl implements FaceService { private VideoTaskRepository videoTaskRepository; @Autowired private TemplateBiz templateBiz; + @Autowired + private DeviceRepository deviceRepository; @Override public ApiResponse> pageQuery(FaceReqQuery faceReqQuery) { @@ -282,19 +282,24 @@ public class FaceServiceImpl implements FaceService { if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片 List sourceEntities = sourceMapper.listBySampleIds(sampleListIds); List memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> { + DeviceConfigEntity deviceConfig = deviceRepository.getDeviceConfig(sourceEntity.getDeviceId()); MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); memberSourceEntity.setScenicId(face.getScenicId()); memberSourceEntity.setFaceId(face.getId()); memberSourceEntity.setMemberId(face.getMemberId()); memberSourceEntity.setSourceId(sourceEntity.getId()); memberSourceEntity.setType(sourceEntity.getType()); - IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), sourceEntity.getType(), faceEntity.getId()); - if (isBuy.isBuy()) { // 如果用户买过 - memberSourceEntity.setIsBuy(1); - } else if (isBuy.isFree()) { // 全免费逻辑 - memberSourceEntity.setIsBuy(1); - } else { - memberSourceEntity.setIsBuy(0); + memberSourceEntity.setIsFree(0); + if (deviceConfig != null) { + if (sourceEntity.getType() == 1) { + if (Integer.valueOf(1).equals(deviceConfig.getVideoFree())) { + memberSourceEntity.setIsFree(1); + } + } else if (sourceEntity.getType() == 2) { + if (Integer.valueOf(1).equals(deviceConfig.getImageFree())) { + memberSourceEntity.setIsFree(1); + } + } } return memberSourceEntity; }).collect(Collectors.toList()); @@ -320,8 +325,23 @@ public class FaceServiceImpl implements FaceService { } } } + } else { + List sourceEntitiesExist = sourceMapper.listByFaceRelation(face.getMemberId(), faceId, 2); + memberSourceEntityList = memberSourceEntityList.stream().filter(memberSourceEntity -> { + return sourceEntitiesExist.stream().noneMatch(sourceEntity -> sourceEntity.getSourceId().equals(memberSourceEntity.getSourceId())); + }).toList(); } if (!memberSourceEntityList.isEmpty()) { + IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), memberSourceEntityList.getFirst().getType(), faceEntity.getId()); + for (MemberSourceEntity memberSourceEntity : memberSourceEntityList) { + if (isBuy.isBuy()) { // 如果用户买过 + memberSourceEntity.setIsBuy(1); + } else if (isBuy.isFree()) { // 全免费逻辑 + memberSourceEntity.setIsBuy(1); + } else { + memberSourceEntity.setIsBuy(0); + } + } sourceMapper.addRelations(memberSourceEntityList); taskTaskService.autoCreateTaskByFaceId(face.getId()); // VideoPieceGetter.Task task = new VideoPieceGetter.Task(); 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 84bd861..70e6520 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 @@ -87,13 +87,13 @@ public class TaskFaceServiceImpl implements TaskFaceService { @Override public SearchFaceRespVo searchFace(Long faceId) { - FaceRespVO faceRespVO = faceMapper.getById(faceId); - if (faceRespVO == null) { + FaceRespVO face = faceMapper.getById(faceId); + if (face == null) { SearchFaceRespVo vo = new SearchFaceRespVo(); vo.setSampleListIds(new ArrayList<>()); return vo; } - Long scenicId = faceRespVO.getScenicId(); + Long scenicId = face.getScenicId(); ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId); IFaceBodyAdapter faceBodyAdapter; if (scenicConfig != null && scenicConfig.getFaceType() != null) { @@ -102,7 +102,7 @@ public class TaskFaceServiceImpl implements TaskFaceService { } else { faceBodyAdapter = FaceBodyFactory.use(); } - SearchFaceRespVo respVo = searchFace(faceBodyAdapter, scenicId.toString(), faceRespVO.getFaceUrl(), "系统定时任务检索"); + SearchFaceRespVo respVo = searchFace(faceBodyAdapter, scenicId.toString(), face.getFaceUrl(), "系统定时任务检索"); if (respVo != null) { FaceEntity faceEntity = new FaceEntity(); faceEntity.setId(faceId); @@ -120,17 +120,9 @@ public class TaskFaceServiceImpl implements TaskFaceService { MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); memberSourceEntity.setScenicId(scenicId); memberSourceEntity.setFaceId(faceEntity.getId()); - memberSourceEntity.setMemberId(faceRespVO.getMemberId()); + memberSourceEntity.setMemberId(face.getMemberId()); memberSourceEntity.setSourceId(sourceEntity.getId()); memberSourceEntity.setType(sourceEntity.getType()); - IsBuyRespVO isBuy = orderBiz.isBuy(faceRespVO.getMemberId(), scenicId, sourceEntity.getType(), sourceEntity.getId()); - if (isBuy.isBuy()) { // 如果用户买过 - memberSourceEntity.setIsBuy(1); - } else if (isBuy.isFree()) { // 全免费逻辑 - memberSourceEntity.setIsBuy(1); - } else { - memberSourceEntity.setIsBuy(0); - } memberSourceEntity.setIsFree(0); if (deviceConfig != null) { if (sourceEntity.getType() == 1) { @@ -146,11 +138,21 @@ public class TaskFaceServiceImpl implements TaskFaceService { return memberSourceEntity; }).collect(Collectors.toList()); if (!memberSourceEntityList.isEmpty()) { + IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), memberSourceEntityList.getFirst().getType(), faceEntity.getId()); + for (MemberSourceEntity memberSourceEntity : memberSourceEntityList) { + if (isBuy.isBuy()) { // 如果用户买过 + memberSourceEntity.setIsBuy(1); + } else if (isBuy.isFree()) { // 全免费逻辑 + memberSourceEntity.setIsBuy(1); + } else { + memberSourceEntity.setIsBuy(0); + } + } sourceMapper.addRelations(memberSourceEntityList); VideoPieceGetter.Task task = new VideoPieceGetter.Task(); task.faceId = faceEntity.getId(); task.faceSampleIds = sampleListIds; - task.memberId = faceRespVO.getMemberId(); + task.memberId = face.getMemberId(); VideoPieceGetter.addTask(task); } } diff --git a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java index 9857672..b24825c 100644 --- a/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java +++ b/src/main/java/com/ycwl/basic/task/DynamicTaskGenerator.java @@ -131,7 +131,7 @@ public class DynamicTaskGenerator { return false; } return face.getScenicId().equals(faceSample.getScenicId()); - }).collect(Collectors.toList()); + }).toList(); if (faceIdList.isEmpty()) { log.info("本景区人脸样本ID不在人脸样本库中,忽略任务:{}", task); return; diff --git a/src/main/resources/mapper/SourceMapper.xml b/src/main/resources/mapper/SourceMapper.xml index e76ca9a..978942b 100644 --- a/src/main/resources/mapper/SourceMapper.xml +++ b/src/main/resources/mapper/SourceMapper.xml @@ -6,11 +6,11 @@ values (#{id}, #{scenicId}, #{deviceId}, #{url}, #{videoUrl}, #{type}, #{faceSampleId}, #{posJson}, #{createTime}) - replace member_source(scenic_id, face_id, member_id, source_id, is_buy, type, order_id, is_free) - values (#{scenicId}, #{faceId}, #{memberId}, #{sourceId}, #{isBuy}, #{type}, #{orderId}, #{isFree}) + replace member_source(scenic_id, face_id, member_id, source_id, is_buy, type, order_id, is_free) + values (#{scenicId}, #{faceId}, #{memberId}, #{sourceId}, #{isBuy}, #{type}, #{orderId}, #{isFree}) - replace member_source(scenic_id, face_id, member_id, source_id, is_buy, type, order_id, is_free) + insert member_source(scenic_id, face_id, member_id, source_id, is_buy, type, order_id, is_free) values (#{item.scenicId}, #{item.faceId}, #{item.memberId}, #{item.sourceId}, #{item.isBuy}, #{item.type}, #{item.orderId}, #{item.isFree})