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; import io.dataease.commons.exception.DEException; 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 getFileMetadataByTestId(String testId) { LoadTestFileExample loadTestFileExample = new LoadTestFileExample(); loadTestFileExample.createCriteria().andTestIdEqualTo(testId); final List loadTestFiles = loadTestFileMapper.selectByExample(loadTestFileExample); if (CollectionUtils.isEmpty(loadTestFiles)) { return new ArrayList<>(); } List 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 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 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()); fileMetadata.setName(file.getOriginalFilename()); 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) { DEException.throwException(e); } 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 getFileMetadataByCaseId(String caseId) { TestCaseFileExample testCaseFileExample = new TestCaseFileExample(); testCaseFileExample.createCriteria().andCaseIdEqualTo(caseId); final List testCaseFiles = testCaseFileMapper.selectByExample(testCaseFileExample); if (CollectionUtils.isEmpty(testCaseFiles)) { return new ArrayList<>(); } List 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); } }