额外更新少字段的relation

This commit is contained in:
2025-07-17 17:45:36 +08:00
parent fd66448f4d
commit 78079b242a
4 changed files with 51 additions and 29 deletions

View File

@@ -8,10 +8,7 @@ import com.ycwl.basic.biz.TemplateBiz;
import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.enums.StatisticEnum; import com.ycwl.basic.enums.StatisticEnum;
import com.ycwl.basic.exception.BaseException; 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.facebody.adapter.IFaceBodyAdapter;
import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.SourceMapper; import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.mapper.StatisticsMapper; import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.mapper.FaceMapper; 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.order.IsBuyRespVO;
import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO; import com.ycwl.basic.model.mobile.scenic.content.ContentPageVO;
import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq; 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.entity.FaceEntity;
import com.ycwl.basic.model.pc.face.req.FaceReqQuery; import com.ycwl.basic.model.pc.face.req.FaceReqQuery;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO; 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.MemberVideoEntity;
import com.ycwl.basic.model.pc.video.entity.VideoEntity; import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo; 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.FaceRepository;
import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoRepository;
@@ -56,7 +55,6 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
@@ -101,6 +99,8 @@ public class FaceServiceImpl implements FaceService {
private VideoTaskRepository videoTaskRepository; private VideoTaskRepository videoTaskRepository;
@Autowired @Autowired
private TemplateBiz templateBiz; private TemplateBiz templateBiz;
@Autowired
private DeviceRepository deviceRepository;
@Override @Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) { public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@@ -282,19 +282,24 @@ public class FaceServiceImpl implements FaceService {
if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片 if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片
List<SourceEntity> sourceEntities = sourceMapper.listBySampleIds(sampleListIds); List<SourceEntity> sourceEntities = sourceMapper.listBySampleIds(sampleListIds);
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> { List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
DeviceConfigEntity deviceConfig = deviceRepository.getDeviceConfig(sourceEntity.getDeviceId());
MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setScenicId(face.getScenicId()); memberSourceEntity.setScenicId(face.getScenicId());
memberSourceEntity.setFaceId(face.getId()); memberSourceEntity.setFaceId(face.getId());
memberSourceEntity.setMemberId(face.getMemberId()); memberSourceEntity.setMemberId(face.getMemberId());
memberSourceEntity.setSourceId(sourceEntity.getId()); memberSourceEntity.setSourceId(sourceEntity.getId());
memberSourceEntity.setType(sourceEntity.getType()); memberSourceEntity.setType(sourceEntity.getType());
IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), sourceEntity.getType(), faceEntity.getId()); memberSourceEntity.setIsFree(0);
if (isBuy.isBuy()) { // 如果用户买过 if (deviceConfig != null) {
memberSourceEntity.setIsBuy(1); if (sourceEntity.getType() == 1) {
} else if (isBuy.isFree()) { // 全免费逻辑 if (Integer.valueOf(1).equals(deviceConfig.getVideoFree())) {
memberSourceEntity.setIsBuy(1); memberSourceEntity.setIsFree(1);
} else { }
memberSourceEntity.setIsBuy(0); } else if (sourceEntity.getType() == 2) {
if (Integer.valueOf(1).equals(deviceConfig.getImageFree())) {
memberSourceEntity.setIsFree(1);
}
}
} }
return memberSourceEntity; return memberSourceEntity;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
@@ -320,8 +325,23 @@ public class FaceServiceImpl implements FaceService {
} }
} }
} }
} else {
List<MemberSourceEntity> 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()) { 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); sourceMapper.addRelations(memberSourceEntityList);
taskTaskService.autoCreateTaskByFaceId(face.getId()); taskTaskService.autoCreateTaskByFaceId(face.getId());
// VideoPieceGetter.Task task = new VideoPieceGetter.Task(); // VideoPieceGetter.Task task = new VideoPieceGetter.Task();

View File

@@ -87,13 +87,13 @@ public class TaskFaceServiceImpl implements TaskFaceService {
@Override @Override
public SearchFaceRespVo searchFace(Long faceId) { public SearchFaceRespVo searchFace(Long faceId) {
FaceRespVO faceRespVO = faceMapper.getById(faceId); FaceRespVO face = faceMapper.getById(faceId);
if (faceRespVO == null) { if (face == null) {
SearchFaceRespVo vo = new SearchFaceRespVo(); SearchFaceRespVo vo = new SearchFaceRespVo();
vo.setSampleListIds(new ArrayList<>()); vo.setSampleListIds(new ArrayList<>());
return vo; return vo;
} }
Long scenicId = faceRespVO.getScenicId(); Long scenicId = face.getScenicId();
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId); ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
IFaceBodyAdapter faceBodyAdapter; IFaceBodyAdapter faceBodyAdapter;
if (scenicConfig != null && scenicConfig.getFaceType() != null) { if (scenicConfig != null && scenicConfig.getFaceType() != null) {
@@ -102,7 +102,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
} else { } else {
faceBodyAdapter = FaceBodyFactory.use(); faceBodyAdapter = FaceBodyFactory.use();
} }
SearchFaceRespVo respVo = searchFace(faceBodyAdapter, scenicId.toString(), faceRespVO.getFaceUrl(), "系统定时任务检索"); SearchFaceRespVo respVo = searchFace(faceBodyAdapter, scenicId.toString(), face.getFaceUrl(), "系统定时任务检索");
if (respVo != null) { if (respVo != null) {
FaceEntity faceEntity = new FaceEntity(); FaceEntity faceEntity = new FaceEntity();
faceEntity.setId(faceId); faceEntity.setId(faceId);
@@ -120,17 +120,9 @@ public class TaskFaceServiceImpl implements TaskFaceService {
MemberSourceEntity memberSourceEntity = new MemberSourceEntity(); MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setScenicId(scenicId); memberSourceEntity.setScenicId(scenicId);
memberSourceEntity.setFaceId(faceEntity.getId()); memberSourceEntity.setFaceId(faceEntity.getId());
memberSourceEntity.setMemberId(faceRespVO.getMemberId()); memberSourceEntity.setMemberId(face.getMemberId());
memberSourceEntity.setSourceId(sourceEntity.getId()); memberSourceEntity.setSourceId(sourceEntity.getId());
memberSourceEntity.setType(sourceEntity.getType()); 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); memberSourceEntity.setIsFree(0);
if (deviceConfig != null) { if (deviceConfig != null) {
if (sourceEntity.getType() == 1) { if (sourceEntity.getType() == 1) {
@@ -146,11 +138,21 @@ public class TaskFaceServiceImpl implements TaskFaceService {
return memberSourceEntity; return memberSourceEntity;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
if (!memberSourceEntityList.isEmpty()) { 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); sourceMapper.addRelations(memberSourceEntityList);
VideoPieceGetter.Task task = new VideoPieceGetter.Task(); VideoPieceGetter.Task task = new VideoPieceGetter.Task();
task.faceId = faceEntity.getId(); task.faceId = faceEntity.getId();
task.faceSampleIds = sampleListIds; task.faceSampleIds = sampleListIds;
task.memberId = faceRespVO.getMemberId(); task.memberId = face.getMemberId();
VideoPieceGetter.addTask(task); VideoPieceGetter.addTask(task);
} }
} }

View File

@@ -131,7 +131,7 @@ public class DynamicTaskGenerator {
return false; return false;
} }
return face.getScenicId().equals(faceSample.getScenicId()); return face.getScenicId().equals(faceSample.getScenicId());
}).collect(Collectors.toList()); }).toList();
if (faceIdList.isEmpty()) { if (faceIdList.isEmpty()) {
log.info("本景区人脸样本ID不在人脸样本库中,忽略任务:{}", task); log.info("本景区人脸样本ID不在人脸样本库中,忽略任务:{}", task);
return; return;

View File

@@ -6,11 +6,11 @@
values (#{id}, #{scenicId}, #{deviceId}, #{url}, #{videoUrl}, #{type}, #{faceSampleId}, #{posJson}, #{createTime}) values (#{id}, #{scenicId}, #{deviceId}, #{url}, #{videoUrl}, #{type}, #{faceSampleId}, #{posJson}, #{createTime})
</insert> </insert>
<insert id="addRelation"> <insert id="addRelation">
replace member_source(scenic_id, face_id, member_id, source_id, is_buy, type, order_id, is_free) replace member_source(scenic_id, face_id, member_id, source_id, is_buy, type, order_id<if test="isFree">, is_free</if>)
values (#{scenicId}, #{faceId}, #{memberId}, #{sourceId}, #{isBuy}, #{type}, #{orderId}, #{isFree}) values (#{scenicId}, #{faceId}, #{memberId}, #{sourceId}, #{isBuy}, #{type}, #{orderId}<if test="isFree">, #{isFree}</if>)
</insert> </insert>
<insert id="addRelations"> <insert id="addRelations">
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 values
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
(#{item.scenicId}, #{item.faceId}, #{item.memberId}, #{item.sourceId}, #{item.isBuy}, #{item.type}, #{item.orderId}, #{item.isFree}) (#{item.scenicId}, #{item.faceId}, #{item.memberId}, #{item.sourceId}, #{item.isBuy}, #{item.type}, #{item.orderId}, #{item.isFree})