支持app端历史数据处理

This commit is contained in:
tianliyong 2022-12-08 11:32:12 +08:00
parent b66893aa84
commit afa2f44515
2 changed files with 93 additions and 13 deletions

View File

@ -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();

View File

@ -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();