支持app端历史数据处理
This commit is contained in:
parent
b66893aa84
commit
afa2f44515
@ -119,7 +119,7 @@ public class WebFileController {
|
||||
try {
|
||||
inputStream = result.getFileStream();
|
||||
response.setContentType("application/x-download");
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + result.getFileKey() + "." + result.getFileFormat());
|
||||
response.addHeader("Content-Disposition", "attachment;filename=" + result.getFileName() + "." + result.getFileFormat());
|
||||
IOUtils.copy(inputStream, outputStream);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
||||
@ -23,6 +23,7 @@ import cn.axzo.oss.manager.api.dto.request.*;
|
||||
import cn.axzo.oss.manager.api.dto.response.*;
|
||||
import cn.axzo.oss.service.api.FileService;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -30,10 +31,8 @@ import org.springframework.core.env.Environment;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -48,6 +47,12 @@ public class FileServiceImpl implements FileService {
|
||||
|
||||
private static String FILE_UPLOAD_CODE = "OSS_FILE_UPLOAD";
|
||||
private static String FILE_UPLOAD_NAME = "文件上传";
|
||||
private static String APPCODE_FACE = "face";
|
||||
private static String SCENE_FACE = "face";
|
||||
private static String APPCODE_IDCARD = "idcard";
|
||||
private static String SCENE_IDCARD = "idcard";
|
||||
private static String APPCODE_BANKCARD = "bankcard";
|
||||
private static String SCENE_BANKCARD = "bankcard";
|
||||
|
||||
@Autowired
|
||||
private FileManager fileManager;
|
||||
@ -238,22 +243,86 @@ public class FileServiceImpl implements FileService {
|
||||
public List<FindFileKeyResponse> findFileKey(FindFileKeyDto dto) {
|
||||
log.info("find file key dto = {}", JsonUtil.obj2Str(dto));
|
||||
|
||||
List<String> urlMd5List = dto.getUrl().stream()
|
||||
List<String> urlList = dto.getUrl();
|
||||
List<String> urlMd5List = urlList.stream()
|
||||
.map(url -> Utility.getMd5(url))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<File> fileList = fileDao.getByUrlMd5s(urlMd5List);
|
||||
|
||||
//处理app端历史数据不在file表中的情况
|
||||
if (urlMd5List.size() > fileList.size()) {
|
||||
// TODO: 2022/12/7
|
||||
List<String> existUrlList = fileList.stream().map(File::getFileUrl).collect(Collectors.toList());
|
||||
urlList.removeAll(existUrlList);
|
||||
List<FindFileKeyResponse> resList = setFileKeyResByUrl(urlList);
|
||||
// 异步新增file数据
|
||||
asyncSaveFile(resList);
|
||||
return resList;
|
||||
}
|
||||
if (CollectionUtil.isEmpty(fileList)) {
|
||||
log.warn("find file key is null,url = {}", Arrays.toString(dto.getUrl().toArray()));
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return setFileKeyRes(fileList);
|
||||
|
||||
return setFileKeyResByFile(fileList);
|
||||
}
|
||||
|
||||
private void asyncSaveFile(List<FindFileKeyResponse> resList) {
|
||||
List<CompletableFuture<Void>> completableFutures = new ArrayList<>(resList.size() / 10 + 1);
|
||||
Lists.partition(resList, 10)
|
||||
.forEach(findFileKeyResponses -> completableFutures.add(CompletableFuture.runAsync(
|
||||
() -> findFileKeyResponses.forEach(response -> saveFile(response))
|
||||
)));
|
||||
}
|
||||
|
||||
private File saveFile(FindFileKeyResponse response) {
|
||||
String url = response.getUrl();
|
||||
|
||||
String appCode = "", bizScene = "";
|
||||
if (url.contains(APPCODE_FACE)) {
|
||||
appCode = APPCODE_FACE;
|
||||
bizScene = SCENE_FACE;
|
||||
} else if(url.contains(APPCODE_IDCARD)) {
|
||||
appCode = APPCODE_IDCARD;
|
||||
bizScene = SCENE_IDCARD;
|
||||
} else if(url.contains(APPCODE_BANKCARD)) {
|
||||
appCode = APPCODE_BANKCARD;
|
||||
bizScene = SCENE_BANKCARD;
|
||||
}
|
||||
if (StringUtils.isEmpty(appCode) || StringUtils.isEmpty(bizScene)) {
|
||||
throw new BizException(CodeEnum.APP_CODE_NOT_FOUND);
|
||||
}
|
||||
// 通过appcode获取文件渠道桶信息
|
||||
AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(appCode);
|
||||
// 通过渠道桶编码获取到具体文件业务场景
|
||||
FileBusinessScene scene = fileBusinessSceneManager
|
||||
.getByBucketNoAndScene(appChannelBucket.getAppChannelBucketNo(), bizScene);
|
||||
// 通过渠道码和桶名称获取获取指定上传配置
|
||||
FileUploadConfig fileUploadConfig = fileUploadConfigManager
|
||||
.getByUploadConfig(scene.getAppChannelBucketNo(), scene.getDirectory());
|
||||
//获取文件名和文件格式
|
||||
int dotIndexOf = url.lastIndexOf(FileClassEnum.DOT.type);
|
||||
int nameIndexOf = url.lastIndexOf(FileClassEnum.SEPARATOR_CHAR.type);
|
||||
String fileFormat = url.substring(dotIndexOf + CommonConstants.ONE).toLowerCase();
|
||||
String fileName = url.substring(nameIndexOf + CommonConstants.ONE, dotIndexOf);
|
||||
|
||||
File ossFile = new File();
|
||||
ossFile.setAppCode(appCode);
|
||||
ossFile.setAppChannelBucketNo(fileUploadConfig.getAppChannelBucketNo());
|
||||
ossFile.setAppCode(fileUploadConfig.getAppCode());
|
||||
ossFile.setChannelCode(fileUploadConfig.getChannelCode());
|
||||
ossFile.setBucketName(fileUploadConfig.getBucketName());
|
||||
ossFile.setDirectory(fileUploadConfig.getDirectory());
|
||||
ossFile.setFileFormat(fileFormat);
|
||||
ossFile.setFileUuid(Utility.getUUID());
|
||||
ossFile.setFileUrl(response.getUrl());
|
||||
ossFile.setUrlMd5(response.getFileKey());
|
||||
ossFile.setStorageUnit(fileUploadConfig.getStorageUnit());
|
||||
ossFile.setStorageSize(fileUploadConfig.getStorageSize());
|
||||
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
|
||||
ossFile.setFileName(fileName);
|
||||
fileDao.save(ossFile);
|
||||
return ossFile;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private List<FindFileUrlResponse> setFileUrlRes(List<String> urlList, List<File> fileList) {
|
||||
List<FindFileUrlResponse> resList = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(urlList)) {
|
||||
@ -273,7 +342,18 @@ public class FileServiceImpl implements FileService {
|
||||
return resList;
|
||||
}
|
||||
|
||||
private List<FindFileKeyResponse> setFileKeyRes(List<File> fileList) {
|
||||
private List<FindFileKeyResponse> setFileKeyResByUrl(List<String> urlList) {
|
||||
List<FindFileKeyResponse> resList = new ArrayList<>();
|
||||
urlList.stream().forEach(url -> {
|
||||
FindFileKeyResponse response = new FindFileKeyResponse();
|
||||
response.setUrl(url);
|
||||
response.setFileKey(Utility.getUUID());
|
||||
resList.add(response);
|
||||
});
|
||||
return resList;
|
||||
}
|
||||
|
||||
private List<FindFileKeyResponse> setFileKeyResByFile(List<File> fileList) {
|
||||
List<FindFileKeyResponse> resList = new ArrayList<>();
|
||||
fileList.forEach(file -> {
|
||||
FindFileKeyResponse response = new FindFileKeyResponse();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user