This commit is contained in:
2024-12-30 20:47:34 +08:00
parent 2031b77f12
commit cfd48861d5
17 changed files with 134 additions and 61 deletions

View File

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycwl.basic.enums.StatisticEnum;
import com.ycwl.basic.exception.BaseException;
import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.SourceMapper;
import com.ycwl.basic.mapper.StatisticsMapper;
import com.ycwl.basic.mapper.FaceMapper;
@@ -13,6 +14,7 @@ import com.ycwl.basic.model.mobile.statistic.req.StatisticsRecordAddReq;
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.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.source.entity.MemberSourceEntity;
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
@@ -22,6 +24,7 @@ import com.ycwl.basic.service.task.TaskService;
import com.ycwl.basic.storage.StorageFactory;
import com.ycwl.basic.storage.adapters.IStorageAdapter;
import com.ycwl.basic.storage.utils.StorageUtil;
import com.ycwl.basic.task.VideoPieceGetter;
import com.ycwl.basic.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -58,6 +61,8 @@ public class FaceServiceImpl implements FaceService {
private TaskService taskTaskService;
@Autowired
private SourceMapper sourceMapper;
@Autowired
private FaceSampleMapper faceSampleMapper;
@Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@@ -141,11 +146,11 @@ public class FaceServiceImpl implements FaceService {
throw new BaseException("人脸照片校验失败,请重新上传");
}
// 2、通过人脸查找用户库
SearchFaceRespVo userDbSearchResult = faceService.searchFace(USER_FACE_DB_NAME, faceUrl);
Long newFaceId = SnowFlakeUtil.getLongId();
FaceEntity faceEntity = new FaceEntity();
faceEntity.setScore(scenicDbSearchResult.getScore());
faceEntity.setMatchResult(scenicDbSearchResult.getSearchResultJson());
SearchFaceRespVo userDbSearchResult = faceService.searchFace(USER_FACE_DB_NAME, faceUrl);
if (userDbSearchResult == null) {
// 都是null了,那得是新的
faceService.addFaceSample(USER_FACE_DB_NAME, newFaceId.toString(), faceUrl, newFaceId.toString());
@@ -158,7 +163,12 @@ public class FaceServiceImpl implements FaceService {
} else {
// 有匹配结果,且能匹配旧的数据
Long oldFaceId = userDbSearchResult.getSampleListIds().get(0);
faceEntity.setId(oldFaceId);
FaceRespVO oldFace = faceMapper.getById(oldFaceId);
if (oldFace == null) {
faceService.deleteFaceSample(USER_FACE_DB_NAME, oldFaceId.toString());
} else {
faceEntity.setId(oldFaceId);
}
}
if (scenicDbSearchResult.getFirstMatchRate() != null) {
faceEntity.setFirstMatchRate(BigDecimal.valueOf(scenicDbSearchResult.getFirstMatchRate()));
@@ -173,14 +183,6 @@ public class FaceServiceImpl implements FaceService {
List<Long> sampleListIds = scenicDbSearchResult.getSampleListIds();
// 匹配原片:照片
List<SourceEntity> sourceEntities = sourceMapper.listBySampleIds(sampleListIds);
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setMemberId(userId);
memberSourceEntity.setSourceId(sourceEntity.getId());
memberSourceEntity.setType(sourceEntity.getType());
memberSourceEntity.setIsBuy(0);
return memberSourceEntity;
}).collect(Collectors.toList());
if (faceEntity.getId()==null) {
//新增人脸
faceEntity.setId(newFaceId);
@@ -191,7 +193,26 @@ public class FaceServiceImpl implements FaceService {
faceMapper.update(faceEntity);
taskTaskService.autoCreateTaskByFaceId(faceEntity.getId());
}
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
memberSourceEntity.setScenicId(scenicId);
memberSourceEntity.setFaceId(faceEntity.getId());
memberSourceEntity.setMemberId(userId);
memberSourceEntity.setSourceId(sourceEntity.getId());
memberSourceEntity.setType(sourceEntity.getType());
memberSourceEntity.setIsBuy(0);
return memberSourceEntity;
}).collect(Collectors.toList());
sourceMapper.addRelations(memberSourceEntityList);
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(sampleListIds);
for (FaceSampleRespVO sampleRespVO : faceSampleList) {
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
task.faceId = faceEntity.getId();
task.faceSampleId = sampleRespVO.getId();
task.memberId = userId;
task.createTime = sampleRespVO.getCreateAt();
VideoPieceGetter.addTask(task);
}
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
statisticsRecordAddReq.setMemberId(userId);
statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code);