2021-02-20 10:07:25 +08:00
|
|
|
package io.dataease.service;
|
|
|
|
|
|
|
|
import io.dataease.base.domain.*;
|
|
|
|
import io.dataease.base.mapper.FileContentMapper;
|
|
|
|
import io.dataease.base.mapper.FileMetadataMapper;
|
|
|
|
import io.dataease.base.mapper.LoadTestFileMapper;
|
|
|
|
import io.dataease.base.mapper.TestCaseFileMapper;
|
|
|
|
import io.dataease.commons.constants.FileType;
|
2021-02-22 15:30:15 +08:00
|
|
|
import io.dataease.commons.exception.DEException;
|
2021-02-20 10:07:25 +08:00
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@Service
|
|
|
|
public class FileService {
|
|
|
|
@Resource
|
|
|
|
private FileMetadataMapper fileMetadataMapper;
|
|
|
|
@Resource
|
|
|
|
private LoadTestFileMapper loadTestFileMapper;
|
|
|
|
@Resource
|
|
|
|
private FileContentMapper fileContentMapper;
|
|
|
|
@Resource
|
|
|
|
private TestCaseFileMapper testCaseFileMapper;
|
|
|
|
|
|
|
|
public byte[] loadFileAsBytes(String id) {
|
|
|
|
FileContent fileContent = fileContentMapper.selectByPrimaryKey(id);
|
|
|
|
|
|
|
|
return fileContent.getFile();
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<FileMetadata> getFileMetadataByTestId(String testId) {
|
|
|
|
LoadTestFileExample loadTestFileExample = new LoadTestFileExample();
|
|
|
|
loadTestFileExample.createCriteria().andTestIdEqualTo(testId);
|
|
|
|
final List<LoadTestFile> loadTestFiles = loadTestFileMapper.selectByExample(loadTestFileExample);
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(loadTestFiles)) {
|
|
|
|
return new ArrayList<>();
|
|
|
|
}
|
|
|
|
List<String> fileIds = loadTestFiles.stream().map(LoadTestFile::getFileId).collect(Collectors.toList());
|
|
|
|
FileMetadataExample example = new FileMetadataExample();
|
|
|
|
example.createCriteria().andIdIn(fileIds);
|
|
|
|
return fileMetadataMapper.selectByExample(example);
|
|
|
|
}
|
|
|
|
|
|
|
|
public FileContent getFileContent(String fileId) {
|
|
|
|
return fileContentMapper.selectByPrimaryKey(fileId);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void deleteFileByIds(List<String> ids) {
|
|
|
|
if (CollectionUtils.isEmpty(ids)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FileMetadataExample example = new FileMetadataExample();
|
|
|
|
example.createCriteria().andIdIn(ids);
|
|
|
|
fileMetadataMapper.deleteByExample(example);
|
|
|
|
|
|
|
|
FileContentExample example2 = new FileContentExample();
|
|
|
|
example2.createCriteria().andFileIdIn(ids);
|
|
|
|
fileContentMapper.deleteByExample(example2);
|
|
|
|
|
|
|
|
LoadTestFileExample example3 = new LoadTestFileExample();
|
|
|
|
example3.createCriteria().andFileIdIn(ids);
|
|
|
|
loadTestFileMapper.deleteByExample(example3);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void deleteFileRelatedByIds(List<String> ids) {
|
|
|
|
if (CollectionUtils.isEmpty(ids)) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FileMetadataExample example = new FileMetadataExample();
|
|
|
|
example.createCriteria().andIdIn(ids);
|
|
|
|
fileMetadataMapper.deleteByExample(example);
|
|
|
|
|
|
|
|
FileContentExample example2 = new FileContentExample();
|
|
|
|
example2.createCriteria().andFileIdIn(ids);
|
|
|
|
fileContentMapper.deleteByExample(example2);
|
|
|
|
}
|
|
|
|
|
|
|
|
public FileMetadata saveFile(MultipartFile file) {
|
|
|
|
final FileMetadata fileMetadata = new FileMetadata();
|
|
|
|
fileMetadata.setId(UUID.randomUUID().toString());
|
2021-02-26 11:25:14 +08:00
|
|
|
fileMetadata.setName(file.getOriginalFilename());
|
2021-02-20 10:07:25 +08:00
|
|
|
fileMetadata.setSize(file.getSize());
|
|
|
|
fileMetadata.setCreateTime(System.currentTimeMillis());
|
|
|
|
fileMetadata.setUpdateTime(System.currentTimeMillis());
|
|
|
|
FileType fileType = getFileType(fileMetadata.getName());
|
|
|
|
fileMetadata.setType(fileType.name());
|
|
|
|
fileMetadataMapper.insert(fileMetadata);
|
|
|
|
|
|
|
|
FileContent fileContent = new FileContent();
|
|
|
|
fileContent.setFileId(fileMetadata.getId());
|
|
|
|
try {
|
|
|
|
fileContent.setFile(file.getBytes());
|
|
|
|
} catch (IOException e) {
|
2021-02-22 15:30:15 +08:00
|
|
|
DEException.throwException(e);
|
2021-02-20 10:07:25 +08:00
|
|
|
}
|
|
|
|
fileContentMapper.insert(fileContent);
|
|
|
|
|
|
|
|
return fileMetadata;
|
|
|
|
}
|
|
|
|
|
|
|
|
public FileMetadata saveFile(byte[] fileByte,String fileName,Long fileSize) {
|
|
|
|
final FileMetadata fileMetadata = new FileMetadata();
|
|
|
|
fileMetadata.setId(UUID.randomUUID().toString());
|
|
|
|
fileMetadata.setName(fileName);
|
|
|
|
fileMetadata.setSize(fileSize);
|
|
|
|
fileMetadata.setCreateTime(System.currentTimeMillis());
|
|
|
|
fileMetadata.setUpdateTime(System.currentTimeMillis());
|
|
|
|
FileType fileType = getFileType(fileMetadata.getName());
|
|
|
|
fileMetadata.setType(fileType.name());
|
|
|
|
fileMetadataMapper.insert(fileMetadata);
|
|
|
|
|
|
|
|
FileContent fileContent = new FileContent();
|
|
|
|
fileContent.setFileId(fileMetadata.getId());
|
|
|
|
fileContent.setFile(fileByte);
|
|
|
|
fileContentMapper.insert(fileContent);
|
|
|
|
|
|
|
|
return fileMetadata;
|
|
|
|
}
|
|
|
|
|
|
|
|
public FileMetadata copyFile(String fileId) {
|
|
|
|
FileMetadata fileMetadata = fileMetadataMapper.selectByPrimaryKey(fileId);
|
|
|
|
FileContent fileContent = getFileContent(fileId);
|
|
|
|
if (fileMetadata != null && fileContent != null) {
|
|
|
|
fileMetadata.setId(UUID.randomUUID().toString());
|
|
|
|
fileMetadata.setCreateTime(System.currentTimeMillis());
|
|
|
|
fileMetadata.setUpdateTime(System.currentTimeMillis());
|
|
|
|
fileMetadataMapper.insert(fileMetadata);
|
|
|
|
|
|
|
|
fileContent.setFileId(fileMetadata.getId());
|
|
|
|
fileContentMapper.insert(fileContent);
|
|
|
|
}
|
|
|
|
return fileMetadata;
|
|
|
|
}
|
|
|
|
|
|
|
|
private FileType getFileType(String filename) {
|
|
|
|
int s = filename.lastIndexOf(".") + 1;
|
|
|
|
String type = filename.substring(s);
|
|
|
|
return FileType.valueOf(type.toUpperCase());
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<FileMetadata> getFileMetadataByCaseId(String caseId) {
|
|
|
|
TestCaseFileExample testCaseFileExample = new TestCaseFileExample();
|
|
|
|
testCaseFileExample.createCriteria().andCaseIdEqualTo(caseId);
|
|
|
|
final List<TestCaseFile> testCaseFiles = testCaseFileMapper.selectByExample(testCaseFileExample);
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(testCaseFiles)) {
|
|
|
|
return new ArrayList<>();
|
|
|
|
}
|
|
|
|
|
|
|
|
List<String> fileIds = testCaseFiles.stream().map(TestCaseFile::getFileId).collect(Collectors.toList());
|
|
|
|
FileMetadataExample example = new FileMetadataExample();
|
|
|
|
example.createCriteria().andIdIn(fileIds);
|
|
|
|
return fileMetadataMapper.selectByExample(example);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void deleteFileById(String fileId) {
|
|
|
|
deleteFileByIds(Collections.singletonList(fileId));
|
|
|
|
}
|
|
|
|
|
|
|
|
public FileMetadata getFileMetadataById(String fileId) {
|
|
|
|
return fileMetadataMapper.selectByPrimaryKey(fileId);
|
|
|
|
}
|
|
|
|
}
|