彻底铲除OSSUtil,抽象、修改

This commit is contained in:
2024-12-26 19:34:20 +08:00
parent 473e7080a1
commit 201a6617ac
45 changed files with 765 additions and 317 deletions

View File

@ -1,36 +0,0 @@
package com.ycwl.basic.service;
import cn.hutool.core.util.StrUtil;
import com.ycwl.basic.exception.BaseException;
import com.ycwl.basic.utils.OssUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Objects;
/**
* file请求服务
*
* @author songmingsong
*/
@Service
public class FileService {
@Autowired
private OssUtil ossUtil;
public String uploadFile(MultipartFile file) throws IOException {
String originalFilename = file.getOriginalFilename();
if (StrUtil.isBlank(originalFilename)) {
throw new BaseException("文件上传失败,文件名不能为空");
}
String fileName=System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));
return ossUtil.uploadFile(file.getInputStream(), fileName);
}
public Boolean delete(String fileName) {
return ossUtil.deleteFile(fileName);
}
}

View File

@ -0,0 +1,22 @@
package com.ycwl.basic.service.impl.pc;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycwl.basic.mapper.FaceDetectLogMapper;
import com.ycwl.basic.model.pc.faceDetectLog.entity.FaceDetectLog;
import com.ycwl.basic.service.pc.FaceDetectLogService;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@Service
public class FaceDetectLogServiceImpl extends ServiceImpl<FaceDetectLogMapper, FaceDetectLog> implements FaceDetectLogService {
@Override
public List<FaceDetectLog> listByTimeDesc() {
LambdaQueryWrapper<FaceDetectLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(FaceDetectLog::getCreateTime);
return list(queryWrapper);
}
}

View File

@ -16,6 +16,10 @@ import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.service.pc.FaceService;
import com.ycwl.basic.service.task.TaskFaceService;
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.enums.StorageType;
import com.ycwl.basic.storage.utils.StorageUtil;
import com.ycwl.basic.task.FaceCleaner;
import com.ycwl.basic.utils.*;
import lombok.extern.slf4j.Slf4j;
@ -31,6 +35,7 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
import static com.ycwl.basic.constant.FaceConstant.USER_FACE_DB_NAME;
@ -45,8 +50,6 @@ public class FaceServiceImpl implements FaceService {
@Autowired
private FaceMapper faceMapper;
@Autowired
private OssUtil ossUtil;
@Autowired
private TaskFaceService faceService;
@Autowired
private StatisticsMapper statisticsMapper;
@ -56,8 +59,6 @@ public class FaceServiceImpl implements FaceService {
private float strictScore = 90F;
@Autowired
private TaskService taskTaskService;
@Autowired
private FaceCleaner faceCleaner;
@Override
public ApiResponse<PageInfo<FaceRespVO>> pageQuery(FaceReqQuery faceReqQuery) {
@ -123,17 +124,21 @@ public class FaceServiceImpl implements FaceService {
log.info("当前登录用户信息:{}",worker);
//1、上传人脸照片
String faceUrl = uploadFileALiOss(file, userId);
IStorageAdapter adapter = StorageFactory.use("faces");
String filePath = StorageUtil.joinPath("user-faces", DateUtils.format(new Date(),"yyyy-MM-dd"));
String originalFilename = file.getOriginalFilename();
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) {
ossUtil.deleteFileByUrl(faceUrl);
adapter.deleteFile(filePath, fileName);
throw new BaseException("人脸照片校验失败,请重新上传");
}
float score = scenicDbSearchResult.getScore();
if (score<faceScore) {
//校验失败,删除,提示重新上传
ossUtil.deleteFileByUrl(faceUrl);
adapter.deleteFile(filePath, fileName);
throw new BaseException("人脸照片校验失败,请重新上传");
}
// 2、通过人脸查找用户库
@ -194,37 +199,4 @@ public class FaceServiceImpl implements FaceService {
return ApiResponse.success(faceMapper.getByMemberId(memberId, 3928516560393736192L));
}
/**
* 阿里oss图片上传
*
* @param file file
* @param userId 用户id
* @return 地址
*/
private String uploadFileALiOss(MultipartFile file,Long userId) {
if (file.isEmpty()) {
throw new RuntimeException("文件不存在!");
}
String originalFilename = file.getOriginalFilename();
//获取文件名后缀
String suffix = originalFilename.split("\\.")[1];
if ("Jpeg".equals(suffix)) {
suffix = "jpg";
}
//文件储存路径
String filePath="";
String dateStr = DateUtils.format(new Date(),"yyyy-MM-dd");
filePath=filePath+dateStr+"/";
// 生成文件名
String fileName= userId+"." + suffix;
InputStream inputStream ;
try {
inputStream = file.getInputStream();
} catch (IOException e) {
log.error("文件上传失败!", e);
return null;
}
return ossUtil.uploadFile(inputStream,filePath+fileName) ;
}
}

View File

@ -33,6 +33,11 @@ import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.task.resp.AddFaceSampleRespVo;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import com.ycwl.basic.service.task.TaskFaceService;
import com.ycwl.basic.storage.StorageFactory;
import com.ycwl.basic.storage.adapters.IStorageAdapter;
import com.ycwl.basic.storage.enums.StorageType;
import com.ycwl.basic.storage.utils.StorageUtil;
import com.ycwl.basic.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -41,7 +46,10 @@ import org.springframework.stereotype.Service;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@ -117,9 +125,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
if (matchList.get(0).getFaceItems().isEmpty()) {
return respVo;
}
List<SearchFaceResponse.Data.MatchListItem.FaceItemsItem> faceItems = matchList.get(0).getFaceItems().stream()
.filter(faceItemsItem -> faceItemsItem.getConfidence() > 50).collect(Collectors.toList());
List<MatchLocalRecord> records = faceItems.stream()
List<MatchLocalRecord> records = matchList.get(0).getFaceItems().stream()
.map(item -> {
MatchLocalRecord record = new MatchLocalRecord();
record.setIdStr(item.getExtraData());
@ -135,6 +141,7 @@ public class TaskFaceServiceImpl implements TaskFaceService {
.collect(Collectors.toList());
log.matchLocalRecord(records);
List<Long> faceSampleIds = records.stream()
.filter(record -> record.getConfidence() > 60)
.map(MatchLocalRecord::getFaceSampleId)
.collect(Collectors.toList());
respVo.setFirstMatchRate(matchList.get(0).getFaceItems().get(0).getConfidence());
@ -310,6 +317,30 @@ public class TaskFaceServiceImpl implements TaskFaceService {
}
}
@Override
public String uploadFile(MultipartFile file, Long userId) {
if (file.isEmpty()) {
throw new RuntimeException("文件不存在!");
}
String originalFilename = file.getOriginalFilename();
//获取文件名后缀
String suffix = originalFilename.split("\\.")[1];
if ("Jpeg".equals(suffix)) {
suffix = "jpg";
}
//文件储存路径
String filePath = StorageUtil.joinPath("user-faces", DateUtils.format(new Date(),"yyyy-MM-dd"));
// 生成文件名
String fileName= userId + "." + suffix;
IStorageAdapter adapter = StorageFactory.use("faces");
try {
return adapter.uploadFile(file.getInputStream(), filePath, fileName);
} catch (IOException e) {
log.error("文件上传失败!", e);
return null;
}
}
public void addFaceDBCache(String dbName) {
redisTemplate.opsForValue().set(FaceConstant.FACE_DB_NAME_PFX + dbName, "1");
}

View File

@ -2,11 +2,6 @@ package com.ycwl.basic.service.impl.task;
import com.alibaba.fastjson.JSON;
import com.ycwl.basic.constant.TaskConstant;
import com.ycwl.basic.device.DeviceFactory;
import com.ycwl.basic.device.operator.IDeviceStorageOperator;
import com.ycwl.basic.mapper.DeviceMapper;
import com.ycwl.basic.model.pc.device.entity.DeviceConfigEntity;
import com.ycwl.basic.model.pc.device.entity.DeviceEntity;
import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.RenderWorkerMapper;
@ -31,8 +26,10 @@ import com.ycwl.basic.model.task.req.TaskReqVo;
import com.ycwl.basic.model.task.req.WorkerAuthReqVo;
import com.ycwl.basic.model.task.resp.TaskSyncRespVo;
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.enums.StorageType;
import com.ycwl.basic.task.VideoPieceGetter;
import com.ycwl.basic.utils.OssUtil;
import com.ycwl.basic.utils.SnowFlakeUtil;
import lombok.NonNull;
import org.apache.commons.lang3.StringUtils;
@ -68,8 +65,6 @@ public class TaskTaskServiceImpl implements TaskService {
@Autowired
private SourceMapper sourceMapper;
@Autowired
private OssUtil ossUtil;
@Autowired
private VideoMapper videoMapper;
private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) {
@ -334,15 +329,16 @@ public class TaskTaskServiceImpl implements TaskService {
if (task == null) {
return null;
}
IStorageAdapter adapter = StorageFactory.use("faces");
String filename = task.getId() + "_" + task.getScenicId() + ".mp4";
if (StringUtils.isBlank(task.getVideoUrl())) {
// 生成
String url = ossUtil.generateUrlOfFile("user-video/", filename);
String url = adapter.getUrl("user-video", filename);
TaskEntity updateTask = new TaskEntity();
updateTask.setId(taskId);
updateTask.setVideoUrl(url);
taskMapper.update(updateTask);
}
return ossUtil.generateSignedUrlForUpload("user-video/", filename);
return adapter.getUrlForUpload("user-video", filename);
}
}

View File

@ -0,0 +1,10 @@
package com.ycwl.basic.service.pc;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycwl.basic.model.pc.faceDetectLog.entity.FaceDetectLog;
import java.util.List;
public interface FaceDetectLogService extends IService<FaceDetectLog> {
List<FaceDetectLog> listByTimeDesc();
}

View File

@ -2,6 +2,7 @@ package com.ycwl.basic.service.task;
import com.ycwl.basic.model.task.resp.AddFaceSampleRespVo;
import com.ycwl.basic.model.task.resp.SearchFaceRespVo;
import org.springframework.web.multipart.MultipartFile;
public interface TaskFaceService {
@ -22,4 +23,6 @@ public interface TaskFaceService {
void createFaceDB(String scenicId);
void assureFaceDB(String scenicId);
String uploadFile(MultipartFile file, Long userId);
}