fix-简化方法

This commit is contained in:
zhangran 2021-08-05 21:00:44 +08:00
parent 44c877d2e1
commit bd41c0d035
7 changed files with 96 additions and 77 deletions

View File

@ -62,25 +62,25 @@ public class BizException extends RuntimeException {
} }
public static void error(boolean b, CodeEnum returnCode) { public static void error(boolean b, CodeEnum returnCode) {
if (b) { if (!b) {
throw new BizException(returnCode.getCode(), returnCode.getMessage(), null); throw new BizException(returnCode.getCode(), returnCode.getMessage(), null);
} }
} }
public static void error(boolean b, CodeEnum returnCode, String message) { public static void error(boolean b, CodeEnum returnCode, String message) {
if (b) { if (!b) {
throw new BizException(returnCode.getCode(), message, null); throw new BizException(returnCode.getCode(), message, null);
} }
} }
public static void error(boolean b, Integer code, String message) { public static void error(boolean b, Integer code, String message) {
if (b) { if (!b) {
throw new BizException(code, message, null); throw new BizException(code, message, null);
} }
} }
public static void error(boolean b, Integer code, String message, Object data) { public static void error(boolean b, Integer code, String message, Object data) {
if (b) { if (!b) {
throw new BizException(code, message, data); throw new BizException(code, message, data);
} }
} }

View File

@ -16,5 +16,5 @@ public interface AppChannelBucketManager {
* @param appCode appcode * @param appCode appcode
* @return * @return
*/ */
List<AppChannelBucket> getByAppCode(String appCode); AppChannelBucket getByAppCode(String appCode);
} }

View File

@ -1,5 +1,6 @@
package cn.axzo.oss.manager.api; package cn.axzo.oss.manager.api;
import cn.axzo.oss.dal.entity.AppChannelBucket;
import cn.axzo.oss.dal.entity.FileChannel; import cn.axzo.oss.dal.entity.FileChannel;
import java.util.List; import java.util.List;
@ -21,8 +22,8 @@ public interface FileChannelManager {
/** /**
* 返回一个最优的渠道 升序第一个 * 返回一个最优的渠道 升序第一个
* *
* @param channelCodes * @param appChannelBuckets
* @return * @return
*/ */
FileChannel getOptimalChannel(List<String> channelCodes); FileChannel getOptimalChannel(List<AppChannelBucket> appChannelBuckets );
} }

View File

@ -3,8 +3,10 @@ package cn.axzo.oss.manager.impl;
import cn.axzo.oss.common.enums.CodeEnum; import cn.axzo.oss.common.enums.CodeEnum;
import cn.axzo.oss.common.exception.BizException; import cn.axzo.oss.common.exception.BizException;
import cn.axzo.oss.dal.entity.AppChannelBucket; import cn.axzo.oss.dal.entity.AppChannelBucket;
import cn.axzo.oss.dal.entity.FileChannel;
import cn.axzo.oss.dal.repository.AppChannelBucketDao; import cn.axzo.oss.dal.repository.AppChannelBucketDao;
import cn.axzo.oss.manager.api.AppChannelBucketManager; import cn.axzo.oss.manager.api.AppChannelBucketManager;
import cn.axzo.oss.manager.api.FileChannelManager;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -22,6 +24,9 @@ public class AppChannelBucketManagerImpl implements AppChannelBucketManager {
@Autowired @Autowired
private AppChannelBucketDao appChannelBucketDao; private AppChannelBucketDao appChannelBucketDao;
@Autowired
private FileChannelManager fileChannelManager;
/** /**
* 通过appcode获取文件渠道桶信息 * 通过appcode获取文件渠道桶信息
* *
@ -29,9 +34,18 @@ public class AppChannelBucketManagerImpl implements AppChannelBucketManager {
* @return * @return
*/ */
@Override @Override
public List<AppChannelBucket> getByAppCode(String appCode) { public AppChannelBucket getByAppCode(String appCode) {
List<AppChannelBucket> appChannelBuckets = appChannelBucketDao.getByAppCode(appCode); List<AppChannelBucket> appChannelBuckets = appChannelBucketDao.getByAppCode(appCode);
BizException.isEmpty(appChannelBuckets, CodeEnum.APP_CHANNEL_BUCKET_NOT_FOUND); BizException.isEmpty(appChannelBuckets, CodeEnum.APP_CHANNEL_BUCKET_NOT_FOUND);
return appChannelBuckets;
// 找到最优渠道
FileChannel fileChannel = fileChannelManager.getOptimalChannel(appChannelBuckets);
AppChannelBucket appChannelBucket = appChannelBuckets.stream().filter(bucket ->
bucket.getChannelCode().equals(fileChannel.getChannelCode()))
.findFirst().orElse(null);
BizException.isEmpty(appChannelBucket, CodeEnum.APP_CHANNEL_NOT_FOUND);
return appChannelBucket;
} }
} }

View File

@ -2,9 +2,12 @@ package cn.axzo.oss.manager.impl;
import cn.axzo.oss.common.enums.CodeEnum; import cn.axzo.oss.common.enums.CodeEnum;
import cn.axzo.oss.common.exception.BizException; import cn.axzo.oss.common.exception.BizException;
import cn.axzo.oss.dal.entity.AppChannelBucket;
import cn.axzo.oss.dal.entity.FileChannel; import cn.axzo.oss.dal.entity.FileChannel;
import cn.axzo.oss.dal.repository.FileChannelDao; import cn.axzo.oss.dal.repository.FileChannelDao;
import cn.axzo.oss.manager.api.FileChannelManager; import cn.axzo.oss.manager.api.FileChannelManager;
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -38,12 +41,15 @@ public class FileChannelManagerImpl implements FileChannelManager {
/** /**
* 返回一个最优的渠道 升序第一个 * 返回一个最优的渠道 升序第一个
* *
* @param channelCodes * @param appChannelBuckets
* @return * @return
*/ */
@Override @Override
public FileChannel getOptimalChannel(List<String> channelCodes) { public FileChannel getOptimalChannel(List<AppChannelBucket> appChannelBuckets ) {
List<FileChannel> fileChannels = fileChannelDao.getByChannelCode(channelCodes); ArrayList<String> channels = Lists.newArrayList();
appChannelBuckets.forEach(appChannelBucket -> channels.add(appChannelBucket.getChannelCode()));
List<FileChannel> fileChannels = fileChannelDao.getByChannelCode(channels);
BizException.isEmpty(fileChannels, CodeEnum.APP_CHANNEL_NOT_FOUND); BizException.isEmpty(fileChannels, CodeEnum.APP_CHANNEL_NOT_FOUND);
return fileChannels.get(0); return fileChannels.get(0);
} }

View File

@ -104,7 +104,7 @@ public class FileServiceImpl implements FileService {
private void checkAppCode(final String appCode) { private void checkAppCode(final String appCode) {
log.info("checkAppCode appCode = {}", appCode); log.info("checkAppCode appCode = {}", appCode);
FileApp fileApp = fileAppDao.getByAppCode(appCode); FileApp fileApp = fileAppDao.getByAppCode(appCode);
BizException.error(Utility.objIsNull(fileApp), CodeEnum.APP_CODE_NOT_FOUND); BizException.error(Utility.objIsNotNull(fileApp), CodeEnum.APP_CODE_NOT_FOUND);
} }
/** /**
@ -120,20 +120,7 @@ public class FileServiceImpl implements FileService {
checkAppCode(dto.getAppCode()); checkAppCode(dto.getAppCode());
// 通过appcode获取文件渠道桶信息 // 通过appcode获取文件渠道桶信息
List<AppChannelBucket> appChannelBuckets = appChannelBucketManager AppChannelBucket appChannelBucket = appChannelBucketManager.getByAppCode(dto.getAppCode());
.getByAppCode(dto.getAppCode());
// 暂无权限判断
// 找到最优渠道
ArrayList<String> channels = Lists.newArrayList();
appChannelBuckets.forEach(appChannelBucket -> channels.add(appChannelBucket.getChannelCode()));
FileChannel fileChannel = fileChannelManager.getOptimalChannel(channels);
AppChannelBucket appChannelBucket = appChannelBuckets.stream().filter(bucket ->
bucket.getChannelCode().equals(fileChannel.getChannelCode()))
.findFirst().orElse(null);
BizException.isEmpty(appChannelBucket, CodeEnum.APP_CHANNEL_NOT_FOUND);
// 通过渠道桶编码获取到具体文件业务场景 // 通过渠道桶编码获取到具体文件业务场景
FileBusinessScene scene = fileBusinessSceneManager FileBusinessScene scene = fileBusinessSceneManager
@ -143,48 +130,10 @@ public class FileServiceImpl implements FileService {
FileUploadConfig fileUploadConfig = fileUploadConfigManager FileUploadConfig fileUploadConfig = fileUploadConfigManager
.getByUploadConfig(scene.getAppChannelBucketNo(), scene.getDirectory()); .getByUploadConfig(scene.getAppChannelBucketNo(), scene.getDirectory());
// 判断容量 // 上传文件并生成file对象
String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length, File ossFile = generateFile(fileUploadConfig, dto);
dto.getFileName());
File ossFile = new File(); return setResponse(ossFile);
ossFile.setAppChannelBucketNo(fileUploadConfig.getAppChannelBucketNo());
ossFile.setAppCode(fileUploadConfig.getAppCode());
ossFile.setChannelCode(fileUploadConfig.getChannelCode());
ossFile.setBucketName(fileUploadConfig.getBucketName());
ossFile.setDirectory(fileUploadConfig.getDirectory());
ossFile.setFileMd5(Utility.getMd5(dto.getFileContent()));
ossFile.setStatus(FileStatusEnum.STATUS_PROCESSING.getCode());
ossFile.setFileFormat(fileConform);
ossFile.setFileName(dto.getFileName());
ossFile.setStorageUnit(fileUploadConfig.getStorageUnit());
ossFile.setStorageSize(fileUploadConfig.getStorageSize());
String uuid = Utility.getUUID();
// 生成上传文件的唯一key
String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform);
String fileUrl = fileManager.uploadByStream(
fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileContent());
if (Utility.isBlank(fileUrl)) {
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_FAIL.getCode());
fileDao.save(ossFile);
throw new BizException(CodeEnum.FILE_UPLOAD_FAILED);
}
ossFile.setFileUuid(uuid);
ossFile.setFileUrl(fileUrl);
ossFile.setUrlMd5(Utility.getMd5(fileUrl));
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
fileDao.save(ossFile);
ServerFileUploadResponse response = new ServerFileUploadResponse();
response.setUrl(ossFile.getFileUrl());
response.setUrlMd5(ossFile.getUrlMd5());
response.setFileKey(ossFile.getFileUuid());
return response;
} }
/** /**
@ -194,18 +143,68 @@ public class FileServiceImpl implements FileService {
// 文件大小超出上限 // 文件大小超出上限
int size = Utility int size = Utility
.capacityConversion(fileUploadConfig.getStorageSize(), fileUploadConfig.getStorageUnit()); .capacityConversion(fileUploadConfig.getStorageSize(), fileUploadConfig.getStorageUnit());
BizException.error(fileLength > size, CodeEnum.FILE_SIZE_EXCEEDS_LIMIT); BizException.error(size > fileLength, CodeEnum.FILE_SIZE_EXCEEDS_LIMIT);
// 文件格式判断 // 文件格式判断
String[] formats = fileUploadConfig.getFileFormat().split(CommonConstants.COMMA); String[] formats = fileUploadConfig.getFileFormat().split(CommonConstants.COMMA);
int lastIndexOf = fileName.lastIndexOf(CommonConstants.DOT); int lastIndexOf = fileName.lastIndexOf(CommonConstants.DOT);
BizException.error(lastIndexOf == CommonConstants.NOT_FOUND_INDEX_OF, CodeEnum.NOT_FILE_FORMAT); BizException
.error(lastIndexOf != CommonConstants.NOT_FOUND_INDEX_OF, CodeEnum.NOT_FILE_FORMAT);
// 是否包含指定格式 // 是否包含指定格式
String fileFormat = fileName.substring(lastIndexOf + CommonConstants.ONE).toLowerCase(); String fileFormat = fileName.substring(lastIndexOf + CommonConstants.ONE).toLowerCase();
boolean contains = Arrays.asList(formats).contains(fileFormat); boolean contains = Arrays.asList(formats).contains(fileFormat);
BizException.error(!contains, CodeEnum.FILE_FORMAT_NOT_SUPPORTED); BizException.error(contains, CodeEnum.FILE_FORMAT_NOT_SUPPORTED);
return fileFormat; return fileFormat;
} }
private File generateFile(FileUploadConfig fileUploadConfig, ServerFileUploadDto dto) {
// 判断容量
String fileConform = isFileConform(fileUploadConfig, dto.getFileContent().length,
dto.getFileName());
String uuid = Utility.getUUID();
// 生成上传文件的唯一key
String tgtFileKey = Utility.generateFileKey(fileUploadConfig.getDirectory(), uuid, fileConform);
File ossFile = new File();
ossFile.setAppChannelBucketNo(fileUploadConfig.getAppChannelBucketNo());
ossFile.setAppCode(fileUploadConfig.getAppCode());
ossFile.setChannelCode(fileUploadConfig.getChannelCode());
ossFile.setBucketName(fileUploadConfig.getBucketName());
ossFile.setDirectory(fileUploadConfig.getDirectory());
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_FAIL.getCode());
ossFile.setStorageUnit(fileUploadConfig.getStorageUnit());
ossFile.setStorageSize(fileUploadConfig.getStorageSize());
ossFile.setFileFormat(fileConform);
// 上传文件
String fileUrl = fileManager.uploadByStream(
fileUploadConfig.getBucketName(), tgtFileKey, dto.getFileContent());
// 保存失败
if (Utility.isBlank(fileUrl)) {
fileDao.save(ossFile);
throw new BizException(CodeEnum.FILE_UPLOAD_FAILED);
}
ossFile.setFileUuid(uuid);
ossFile.setFileUrl(fileUrl);
ossFile.setUrlMd5(Utility.getMd5(fileUrl));
ossFile.setStatus(FileStatusEnum.STATUS_UPLOAD_SUCCESS.getCode());
ossFile.setFileName(dto.getFileName());
ossFile.setFileMd5(Utility.getMd5(dto.getFileContent()));
fileDao.save(ossFile);
return ossFile;
}
private ServerFileUploadResponse setResponse(File ossFile){
ServerFileUploadResponse response = new ServerFileUploadResponse();
response.setUrl(ossFile.getFileUrl());
response.setUrlMd5(ossFile.getUrlMd5());
response.setFileKey(ossFile.getFileUuid());
return response;
}
} }

View File

@ -4,12 +4,10 @@ import cn.axzo.oss.manager.api.dto.request.ServerFileDeleteDto;
import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto; import cn.axzo.oss.manager.api.dto.request.ServerFileUploadDto;
import cn.axzo.oss.service.api.FileService; import cn.axzo.oss.service.api.FileService;
import cn.axzo.oss.test.base.SpringTestBase; import cn.axzo.oss.test.base.SpringTestBase;
import java.io.BufferedInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -38,9 +36,9 @@ public class FileServiceTest extends SpringTestBase {
ServerFileUploadDto dto = new ServerFileUploadDto(); ServerFileUploadDto dto = new ServerFileUploadDto();
dto.setAppCode("test"); dto.setAppCode("test");
dto.setBizScene("1"); dto.setBizScene("1");
dto.setFileName("一个新的文件.jpg"); dto.setFileName("一个新的文件.xlsx");
File file = new File("/Users/zhangran/Desktop/xx/IMG_20210728_162815.jpg"); File file = new File("/Users/admin/Downloads/表扬人员名称.xlsx");
FileInputStream fileInputStream = null; FileInputStream fileInputStream = null;
@ -53,9 +51,10 @@ public class FileServiceTest extends SpringTestBase {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// System.out.println(Arrays.toString(bytes));
dto.setFileContent(bytes); dto.setFileContent(bytes);
//
fileService.upload(dto); // fileService.upload(dto);
} }