You've already forked FrameTour-BE
修改
This commit is contained in:
@ -105,7 +105,7 @@ public class DeviceServiceImpl implements DeviceService {
|
||||
if (device != null) {
|
||||
device.setOnline(deviceItem.getOnline());
|
||||
device.setKeepaliveAt(deviceItem.getKeepaliveAt());
|
||||
deviceRepository.updateOnlineStatus(device.getId(), null, 1, deviceItem.getKeepaliveAt());
|
||||
deviceRepository.updateOnlineStatus(device.getId(), deviceItem.getIp(), 1, deviceItem.getKeepaliveAt());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.ycwl.basic.biz.OrderBiz;
|
||||
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;
|
||||
@ -30,7 +29,6 @@ import com.ycwl.basic.task.VideoPieceGetter;
|
||||
import com.ycwl.basic.utils.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@ -129,16 +127,8 @@ public class FaceServiceImpl implements FaceService {
|
||||
String suffix = originalFilename.split("\\.", 2)[1];
|
||||
String fileName = UUID.randomUUID().toString() + "." + suffix;
|
||||
String faceUrl = adapter.uploadFile(file, filePath, fileName);
|
||||
SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(scenicId, faceUrl);
|
||||
if (scenicDbSearchResult == null) {
|
||||
adapter.deleteFile(filePath, fileName);
|
||||
throw new BaseException("人脸照片校验失败,请重新上传");
|
||||
}
|
||||
// 2、通过人脸查找用户库
|
||||
Long newFaceId = SnowFlakeUtil.getLongId();
|
||||
FaceEntity faceEntity = new FaceEntity();
|
||||
faceEntity.setScore(scenicDbSearchResult.getScore());
|
||||
faceEntity.setMatchResult(scenicDbSearchResult.getSearchResultJson());
|
||||
Long oldFaceId = null;
|
||||
SearchFaceRespVo userDbSearchResult = faceService.searchFace(USER_FACE_DB_NAME+scenicId, faceUrl);
|
||||
float strictScore = 0.6F;
|
||||
if (userDbSearchResult == null) {
|
||||
@ -152,24 +142,63 @@ public class FaceServiceImpl implements FaceService {
|
||||
faceService.addFaceSample(USER_FACE_DB_NAME+scenicId, newFaceId.toString(), faceUrl, newFaceId.toString());
|
||||
} else {
|
||||
// 有匹配结果,且能匹配旧的数据
|
||||
Optional<Long> faceAny = userDbSearchResult.getSampleListIds().stream().filter(oldFaceId -> {
|
||||
FaceEntity face = faceRepository.getFace(oldFaceId);
|
||||
Optional<Long> faceAny = userDbSearchResult.getSampleListIds().stream().filter(_faceId -> {
|
||||
FaceEntity face = faceRepository.getFace(_faceId);
|
||||
if (face == null) {
|
||||
return false;
|
||||
}
|
||||
return face.getScenicId().equals(scenicId);
|
||||
}).findAny();
|
||||
if (faceAny.isPresent()) {
|
||||
Long oldFaceId = faceAny.get();
|
||||
oldFaceId = faceAny.get();
|
||||
FaceRespVO oldFace = faceMapper.getById(oldFaceId);
|
||||
if (oldFace == null) {
|
||||
faceService.deleteFaceSample(USER_FACE_DB_NAME+scenicId, oldFaceId.toString());
|
||||
faceService.addFaceSample(USER_FACE_DB_NAME+scenicId, newFaceId.toString(), faceUrl, newFaceId.toString());
|
||||
oldFaceId = null;
|
||||
} else {
|
||||
faceEntity.setId(oldFaceId);
|
||||
newFaceId = oldFaceId;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (oldFaceId==null) {
|
||||
//新增人脸
|
||||
FaceEntity faceEntity = new FaceEntity();
|
||||
faceEntity.setCreateAt(new Date());
|
||||
faceEntity.setScenicId(scenicId);
|
||||
faceEntity.setMemberId(userId);
|
||||
faceEntity.setFaceUrl(faceUrl);
|
||||
faceEntity.setId(newFaceId);
|
||||
faceMapper.add(faceEntity);
|
||||
}
|
||||
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
|
||||
statisticsRecordAddReq.setMemberId(userId);
|
||||
statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code);
|
||||
statisticsRecordAddReq.setScenicId(scenicId);
|
||||
statisticsRecordAddReq.setMorphId(newFaceId);
|
||||
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
|
||||
FaceRecognizeResp resp = new FaceRecognizeResp();
|
||||
resp.setUrl(faceUrl);
|
||||
resp.setFaceId(newFaceId);
|
||||
matchFaceId(newFaceId);
|
||||
return ApiResponse.success(resp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FaceRespVO> listByUser(Long userId, String scenicId) {
|
||||
return faceMapper.listByScenicAndUserId(scenicId, userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchFaceRespVo matchFaceId(Long faceId) {
|
||||
FaceEntity face = faceRepository.getFace(faceId);
|
||||
if (face == null) {
|
||||
return null;
|
||||
}
|
||||
SearchFaceRespVo scenicDbSearchResult = faceService.searchFace(face.getScenicId(), face.getFaceUrl());
|
||||
FaceEntity faceEntity = new FaceEntity();
|
||||
faceEntity.setScore(scenicDbSearchResult.getScore());
|
||||
faceEntity.setMatchResult(scenicDbSearchResult.getSearchResultJson());
|
||||
if (scenicDbSearchResult.getFirstMatchRate() != null) {
|
||||
faceEntity.setFirstMatchRate(BigDecimal.valueOf(scenicDbSearchResult.getFirstMatchRate()));
|
||||
}
|
||||
@ -177,38 +206,20 @@ public class FaceServiceImpl implements FaceService {
|
||||
faceEntity.setMatchSampleIds(scenicDbSearchResult.getSampleListIds().stream().map(String::valueOf).collect(Collectors.joining(",")));
|
||||
}
|
||||
faceEntity.setCreateAt(new Date());
|
||||
faceEntity.setScenicId(scenicId);
|
||||
faceEntity.setMemberId(userId);
|
||||
faceEntity.setFaceUrl(faceUrl);
|
||||
faceEntity.setScenicId(face.getScenicId());
|
||||
faceEntity.setMemberId(face.getMemberId());
|
||||
faceEntity.setFaceUrl(face.getFaceUrl());
|
||||
List<Long> sampleListIds = scenicDbSearchResult.getSampleListIds();
|
||||
if (faceEntity.getId()==null) {
|
||||
//新增人脸
|
||||
faceEntity.setId(newFaceId);
|
||||
faceMapper.add(faceEntity);
|
||||
} else {
|
||||
//2、更新人脸
|
||||
faceMapper.update(faceEntity);
|
||||
faceRepository.clearFaceCache(faceEntity.getId());
|
||||
}
|
||||
StatisticsRecordAddReq statisticsRecordAddReq = new StatisticsRecordAddReq();
|
||||
statisticsRecordAddReq.setMemberId(userId);
|
||||
statisticsRecordAddReq.setType(StatisticEnum.UPLOAD_FACE.code);
|
||||
statisticsRecordAddReq.setScenicId(scenicId);
|
||||
statisticsRecordAddReq.setMorphId(faceEntity.getId());
|
||||
statisticsMapper.addStatisticsRecord(statisticsRecordAddReq);
|
||||
FaceRecognizeResp resp = new FaceRecognizeResp();
|
||||
resp.setUrl(faceUrl);
|
||||
resp.setFaceId(faceEntity.getId());
|
||||
if (sampleListIds != null && !sampleListIds.isEmpty()) {// 匹配原片:照片
|
||||
List<SourceEntity> sourceEntities = sourceMapper.listBySampleIds(sampleListIds);
|
||||
List<MemberSourceEntity> memberSourceEntityList = sourceEntities.stream().map(sourceEntity -> {
|
||||
MemberSourceEntity memberSourceEntity = new MemberSourceEntity();
|
||||
memberSourceEntity.setScenicId(scenicId);
|
||||
memberSourceEntity.setFaceId(faceEntity.getId());
|
||||
memberSourceEntity.setMemberId(userId);
|
||||
memberSourceEntity.setScenicId(face.getScenicId());
|
||||
memberSourceEntity.setFaceId(face.getId());
|
||||
memberSourceEntity.setMemberId(face.getMemberId());
|
||||
memberSourceEntity.setSourceId(sourceEntity.getId());
|
||||
memberSourceEntity.setType(sourceEntity.getType());
|
||||
IsBuyRespVO isBuy = orderBiz.isBuy(userId, scenicId, sourceEntity.getType(), sourceEntity.getId());
|
||||
IsBuyRespVO isBuy = orderBiz.isBuy(face.getMemberId(), face.getScenicId(), sourceEntity.getType(), sourceEntity.getId());
|
||||
if (isBuy.isBuy()) { // 如果用户买过
|
||||
memberSourceEntity.setIsBuy(1);
|
||||
} else if (isBuy.isFree()) { // 全免费逻辑
|
||||
@ -224,11 +235,13 @@ public class FaceServiceImpl implements FaceService {
|
||||
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
|
||||
task.faceId = faceEntity.getId();
|
||||
task.faceSampleIds = sampleListIds;
|
||||
task.memberId = userId;
|
||||
task.memberId = face.getMemberId();
|
||||
VideoPieceGetter.addTask(task);
|
||||
}
|
||||
}
|
||||
return ApiResponse.success(resp);
|
||||
faceMapper.update(faceEntity);
|
||||
faceRepository.clearFaceCache(faceEntity.getId());
|
||||
return scenicDbSearchResult;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,12 +6,15 @@ import com.ycwl.basic.mapper.SourceMapper;
|
||||
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
|
||||
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
|
||||
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
|
||||
import com.ycwl.basic.repository.SourceRepository;
|
||||
import com.ycwl.basic.service.pc.SourceService;
|
||||
import com.ycwl.basic.task.VideoPieceGetter;
|
||||
import com.ycwl.basic.utils.ApiResponse;
|
||||
import com.ycwl.basic.utils.SnowFlakeUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -22,6 +25,8 @@ import java.util.List;
|
||||
public class SourceServiceImpl implements SourceService {
|
||||
@Autowired
|
||||
private SourceMapper sourceMapper;
|
||||
@Autowired
|
||||
private SourceRepository sourceRepository;
|
||||
|
||||
@Override
|
||||
public ApiResponse<PageInfo<SourceRespVO>> pageQuery(SourceReqQuery sourceReqQuery) {
|
||||
@ -71,4 +76,16 @@ public class SourceServiceImpl implements SourceService {
|
||||
return ApiResponse.fail("修改失败");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResponse cutVideo(Long id) {
|
||||
SourceEntity source = sourceRepository.getSource(id);
|
||||
if (Integer.valueOf(2).equals(source.getType())) {
|
||||
// 下载切片
|
||||
VideoPieceGetter.Task task = new VideoPieceGetter.Task();
|
||||
task.faceSampleIds = Collections.singletonList(source.getFaceSampleId());
|
||||
VideoPieceGetter.addTask(task);
|
||||
}
|
||||
return ApiResponse.success("任务已下发");
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
|
||||
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.task.resp.SearchFaceRespVo;
|
||||
import com.ycwl.basic.utils.ApiResponse;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
@ -22,4 +23,8 @@ public interface FaceService {
|
||||
ApiResponse<Integer> deleteByIds(List<Long> ids);
|
||||
|
||||
ApiResponse faceUpload(MultipartFile file, Long scrnicId);
|
||||
|
||||
List<FaceRespVO> listByUser(Long userId, String scenicId);
|
||||
SearchFaceRespVo matchFaceId(Long faceId);
|
||||
|
||||
}
|
||||
|
@ -20,4 +20,5 @@ public interface SourceService {
|
||||
ApiResponse<Integer> deleteById(Long id);
|
||||
ApiResponse<Integer> update(SourceEntity source);
|
||||
|
||||
ApiResponse cutVideo(Long id);
|
||||
}
|
||||
|
@ -265,9 +265,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
sampleStoreDay = 3;
|
||||
}
|
||||
Date thatDay = DateUtil.offsetDay(new Date(), -sampleStoreDay);
|
||||
Date dayStart = DateUtil.beginOfDay(thatDay);
|
||||
Date dayEnd = DateUtil.endOfDay(thatDay);
|
||||
query.setStartTime(dayStart);
|
||||
query.setEndTime(dayEnd);
|
||||
IAcsClient client = getClient();
|
||||
faceSampleMapper.list(query).forEach(faceSampleEntity -> {
|
||||
@ -279,6 +277,8 @@ public class TaskFaceServiceImpl implements TaskFaceService {
|
||||
client.getAcsResponse(request);
|
||||
} catch (ClientException e) {
|
||||
return;
|
||||
} finally {
|
||||
faceSampleMapper.deleteById(faceSampleEntity.getId());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user