C a c h e

This commit is contained in:
2025-09-20 17:49:03 +08:00
parent d55c7a7769
commit b7d3e20c46
16 changed files with 219 additions and 75 deletions

View File

@@ -25,12 +25,10 @@ import com.ycwl.basic.model.mobile.goods.VideoTaskStatusVO;
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;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
import com.ycwl.basic.integration.common.manager.ScenicConfigManager;
import com.ycwl.basic.model.pc.project.resp.ProjectRespVO;
@@ -40,13 +38,16 @@ import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.task.entity.TaskEntity;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.model.pc.video.entity.MemberVideoEntity;
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.repository.TaskUpdateResult;
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.MemberRelationRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.repository.TemplateRepository;
import com.ycwl.basic.repository.VideoRepository;
import com.ycwl.basic.repository.VideoTaskRepository;
import com.ycwl.basic.service.mobile.GoodsService;
@@ -75,7 +76,6 @@ import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
@@ -134,6 +134,10 @@ public class FaceServiceImpl implements FaceService {
private GoodsService goodsService;
@Autowired
private ProjectMapper projectMapper;
@Autowired
private MemberRelationRepository memberRelationRepository;
@Autowired
private TemplateRepository templateRepository;
@Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@@ -341,7 +345,8 @@ public class FaceServiceImpl implements FaceService {
// 保存关联关系并创建任务
sourceMapper.addRelations(memberSourceEntityList);
taskTaskService.autoCreateTaskByFaceId(face.getId());
memberRelationRepository.clearSCacheByFace(faceId);
taskTaskService.autoCreateTaskByFaceId(faceId);
log.info("人脸匹配完成:faceId={}, 匹配样本数={}, 关联源文件数={}, 免费数={}",
faceId, sampleListIds.size(), memberSourceEntityList.size(), freeSourceIds.size());
@@ -652,14 +657,32 @@ public class FaceServiceImpl implements FaceService {
@Override
public List<ContentPageVO> faceContentList(Long faceId) {
FaceRespVO faceRespVO = faceMapper.getById(faceId);
if (faceRespVO == null) {
FaceEntity face = faceRepository.getFace(faceId);
if (face == null) {
return Collections.emptyList();
}
Long userId = faceRespVO.getMemberId();
List<ContentPageVO> contentList = templateMapper.listFor(faceRespVO.getScenicId());
contentList.forEach(contentPageVO -> {
List<MemberVideoEntity> memberVideoEntityList = videoMapper.userFaceTemplateVideo(userId, faceId, contentPageVO.getTemplateId());
Long userId = face.getMemberId();
List<TemplateRespVO> templateList = templateRepository.getTemplateListByScenicId(face.getScenicId());
List<ContentPageVO> contentList = templateList.stream().map(template -> {
/// select t.id templateId, t.scenic_id, t.`group`, t.`name`, pid, t.cover_url templateCoverUrl,
/// 0 as sourceType, sort,
/// t.create_time, t.price
/// from template t
/// where t.scenic_id = #{scenicId} and pid = 0 and t.status = 1
/// order by sort
ContentPageVO content = new ContentPageVO();
content.setTemplateId(template.getId());
content.setScenicId(template.getScenicId());
content.setGroup(template.getGroup());
content.setName(template.getName());
content.setTemplateCoverUrl(template.getCoverUrl());
content.setSourceType(0);
content.setSort(template.getSort());
content.setGoodsType(0);
content.setScenicName(template.getScenicName());
return content;
}).peek(contentPageVO -> {
List<MemberVideoEntity> memberVideoEntityList = memberRelationRepository.listRelationByFaceAndTemplate(faceId, contentPageVO.getTemplateId());
contentPageVO.setGoodsType(0);
contentPageVO.setContentType(1);
contentPageVO.setSort(contentPageVO.getSort());
@@ -696,10 +719,10 @@ public class FaceServiceImpl implements FaceService {
if (buy.isBuy()) {
contentPageVO.setIsBuy(1);
}
});
}).collect(Collectors.toList());
SourceReqQuery sourceReqQuery = new SourceReqQuery();
sourceReqQuery.setScenicId(faceRespVO.getScenicId());
sourceReqQuery.setScenicId(face.getScenicId());
sourceReqQuery.setFaceId(faceId);
sourceReqQuery.setMemberId(userId);
//查询源素材
@@ -710,8 +733,8 @@ public class FaceServiceImpl implements FaceService {
sourceImageContent.setName("照片集");
sourceVideoContent.setSort(9999);
sourceImageContent.setSort(9999);
sourceVideoContent.setScenicId(faceRespVO.getScenicId());
sourceImageContent.setScenicId(faceRespVO.getScenicId());
sourceVideoContent.setScenicId(face.getScenicId());
sourceImageContent.setScenicId(face.getScenicId());
sourceVideoContent.setGoodsType(1);
sourceImageContent.setGoodsType(2);
sourceVideoContent.setContentType(2);
@@ -720,9 +743,9 @@ public class FaceServiceImpl implements FaceService {
sourceImageContent.setLockType(-1);
sourceVideoContent.setGroup("直出原片");
sourceImageContent.setGroup("直出原片");
ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(faceRespVO.getScenicId());
ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(face.getScenicId());
if (!Boolean.TRUE.equals(scenicConfig.getBoolean("disable_source_image"))) {
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(userId, faceRespVO.getScenicId(), 2, faceId);
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(userId, face.getScenicId(), 2, faceId);
sourceImageContent.setSourceType(isBuyRespVO.getGoodsType());
sourceImageContent.setContentId(isBuyRespVO.getGoodsId());
if (isBuyRespVO.isBuy()) {
@@ -730,7 +753,7 @@ public class FaceServiceImpl implements FaceService {
} else {
sourceImageContent.setIsBuy(0);
}
List<MemberSourceEntity> relations = sourceMapper.listByFaceRelation(faceRespVO.getMemberId(), faceId, 2);
List<MemberSourceEntity> relations = memberRelationRepository.listSourceByFaceRelation(faceId, 2);
if (!relations.isEmpty()) {
sourceImageContent.setLockType(-1);
} else {
@@ -741,7 +764,7 @@ public class FaceServiceImpl implements FaceService {
contentList.add(sourceImageContent);
}
if (!Boolean.TRUE.equals(scenicConfig.getBoolean("disable_source_video"))) {
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(userId, faceRespVO.getScenicId(), 1, faceId);
IsBuyRespVO isBuyRespVO = orderBiz.isBuy(userId, face.getScenicId(), 1, faceId);
sourceVideoContent.setSourceType(isBuyRespVO.getGoodsType());
sourceVideoContent.setContentId(isBuyRespVO.getGoodsId());
if (isBuyRespVO.isBuy()) {
@@ -749,7 +772,7 @@ public class FaceServiceImpl implements FaceService {
} else {
sourceVideoContent.setIsBuy(0);
}
List<MemberSourceEntity> relations = sourceMapper.listByFaceRelation(faceRespVO.getMemberId(), faceId, 1);
List<MemberSourceEntity> relations = memberRelationRepository.listSourceByFaceRelation(faceId, 1);
if (!relations.isEmpty()) {
sourceVideoContent.setLockType(-1);
} else {
@@ -885,8 +908,8 @@ public class FaceServiceImpl implements FaceService {
sourceReqQuery.setMemberId(face.getMemberId());
sourceReqQuery.setFaceId(faceId);
sourceReqQuery.setType(2);
Integer countUser = sourceMapper.countUser(sourceReqQuery);
if (countUser != null && countUser > 0) {
List<MemberSourceEntity> countUser = memberRelationRepository.listSourceByFaceRelation(faceId, 2);
if (countUser != null && !countUser.isEmpty()) {
statusResp.setStep2Status(true);
} else {
statusResp.setStep2Status(false);
@@ -1089,7 +1112,8 @@ public class FaceServiceImpl implements FaceService {
face.getMemberId(), sampleListIds, false);
sourceMapper.addRelations(memberSourceEntityList);
taskTaskService.autoCreateTaskByFaceId(face.getId());
memberRelationRepository.clearSCacheByFace(faceId);
taskTaskService.autoCreateTaskByFaceId(faceId);
log.info("自定义人脸匹配完成:faceId={}, 匹配样本数={}, 关联源文件数={}, 免费数={}",
faceId, sampleListIds.size(), memberSourceEntityList.size(), freeSourceIds.size());

View File

@@ -51,6 +51,7 @@ import com.ycwl.basic.model.wx.WXPayOrderReqVO;
import com.ycwl.basic.pay.adapter.IPayAdapter;
import com.ycwl.basic.pay.entity.PayResponse;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.MemberRelationRepository;
import com.ycwl.basic.repository.PriceRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.repository.TemplateRepository;
@@ -135,6 +136,8 @@ public class OrderServiceImpl implements OrderService {
private IVoucherService iVoucherService;
@Autowired
private ICouponService iCouponService;
@Autowired
private MemberRelationRepository memberRelationRepository;
@Override
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query) {
@@ -760,7 +763,7 @@ public class OrderServiceImpl implements OrderService {
return ApiResponse.fail("您无权购买此内容!");
}
// 找下有没有照片
List<MemberSourceEntity> photoList = sourceMapper.listByFaceRelation(userId, batchOrderReqVO.getFaceId(), 2);
List<MemberSourceEntity> photoList = memberRelationRepository.listSourceByFaceRelation(batchOrderReqVO.getFaceId(), 2);
if (photoList.isEmpty()) {
log.info("请先游玩后再来购买商品!");
return ApiResponse.fail("请先游玩后再来购买商品!");
@@ -843,7 +846,7 @@ public class OrderServiceImpl implements OrderService {
Long goodsId = switch (productItem.getProductType()) {
case PHOTO_SET, RECORDING_SET -> face.getId();
case VLOG_VIDEO -> {
List<MemberVideoEntity> videos = videoRepository.getVideoByFaceAndTemplateId(face.getMemberId(), face.getId(), productItem.getProductId());
List<MemberVideoEntity> videos = memberRelationRepository.listRelationByFaceAndTemplate(face.getId(), Long.valueOf(productItem.getProductId()));
yield videos.getFirst().getVideoId();
}
default -> 0L;