From bdcb549033c30fadebe4574b1f91b63fa46e1795 Mon Sep 17 00:00:00 2001 From: song-tianyang Date: Tue, 25 Jan 2022 10:46:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E5=9C=BA=E6=99=AF):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B8=A6=E6=96=87=E4=BB=B6=E7=9A=84=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E8=BD=AC=E6=80=A7=E8=83=BD=E6=B5=8B=E8=AF=95=E6=97=B6?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E6=96=87=E4=BB=B6=E4=BC=9A=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=9A=84=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复带文件的场景转性能测试时附件文件会重复保存的缺陷 --- .../api/service/APITestService.java | 12 +++-- .../io/metersphere/service/FileService.java | 49 ++++++++++++++++++- .../db/migration/V106__v1.17_release.sql | 3 ++ 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/service/APITestService.java b/backend/src/main/java/io/metersphere/api/service/APITestService.java index e56496eb39..386a0db132 100644 --- a/backend/src/main/java/io/metersphere/api/service/APITestService.java +++ b/backend/src/main/java/io/metersphere/api/service/APITestService.java @@ -459,7 +459,7 @@ public class APITestService { * @return * @author song tianyang */ - public JmxInfoDTO updateJmxString(String jmx,String projectId) { + public JmxInfoDTO updateJmxString(String jmx, String projectId) { jmx = this.updateJmxMessage(jmx); //获取要转化的文件 @@ -495,9 +495,11 @@ public class APITestService { File file = new File(filePath); if (file.exists() && file.isFile()) { try { - FileMetadata fileMetadata = fileService.saveFile(file, FileUtil.readAsByteArray(file),projectId); - fileMetadataList.add(fileMetadata); - attachmentFiles.put(fileMetadata.getId(), fileMetadata.getName()); + FileMetadata fileMetadata = fileService.insertFileByFileName(file, FileUtil.readAsByteArray(file), projectId); + if (fileMetadata != null) { + fileMetadataList.add(fileMetadata); + attachmentFiles.put(fileMetadata.getId(), fileMetadata.getName()); + } } catch (Exception e) { LogUtil.error(e); } @@ -623,7 +625,7 @@ public class APITestService { HashTree hashTree = runRequest.getTestElement().generateHashTree(config); String jmxString = runRequest.getTestElement().getJmx(hashTree); //将jmx处理封装为通用方法 - JmxInfoDTO dto = updateJmxString(jmxString,runRequest.getProjectId()); + JmxInfoDTO dto = updateJmxString(jmxString, runRequest.getProjectId()); dto.setName(runRequest.getName() + ".jmx"); return dto; } diff --git a/backend/src/main/java/io/metersphere/service/FileService.java b/backend/src/main/java/io/metersphere/service/FileService.java index 95957a861e..9e01561a11 100644 --- a/backend/src/main/java/io/metersphere/service/FileService.java +++ b/backend/src/main/java/io/metersphere/service/FileService.java @@ -9,8 +9,8 @@ import io.metersphere.commons.exception.MSException; import io.metersphere.performance.request.QueryProjectFileRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -44,7 +44,7 @@ public class FileService { public void setFileContent(String fileId, byte[] content) { FileContent record = new FileContent(); - record .setFile(content); + record.setFile(content); record.setFileId(fileId); fileContentMapper.updateByPrimaryKeySelective(record); } @@ -121,6 +121,51 @@ public class FileService { return fileMetadata; } + public FileMetadata insertFileByFileName(File file, byte[] fileByte, String projectId) { + if (StringUtils.isEmpty(file.getName())) { + return null; + }else { + FileMetadataExample example = new FileMetadataExample(); + example.createCriteria().andProjectIdEqualTo(projectId).andNameEqualTo(file.getName()); + List fileMetadatasInDataBase = fileMetadataMapper.selectByExample(example); + if(CollectionUtils.isEmpty(fileMetadatasInDataBase)){ + final FileMetadata fileMetadata = new FileMetadata(); + fileMetadata.setId(UUID.randomUUID().toString()); + fileMetadata.setName(file.getName()); + fileMetadata.setSize(file.length()); + fileMetadata.setProjectId(projectId); + 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; + }else { + FileMetadata fileMetadata = fileMetadatasInDataBase.get(0); + fileMetadata.setName(file.getName()); + fileMetadata.setSize(file.length()); + fileMetadata.setProjectId(projectId); + fileMetadata.setUpdateTime(System.currentTimeMillis()); + FileType fileType = getFileType(fileMetadata.getName()); + fileMetadata.setType(fileType.name()); + fileMetadataMapper.updateByPrimaryKeySelective(fileMetadata); + + fileContentMapper.deleteByPrimaryKey(fileMetadata.getId()); + FileContent fileContent = new FileContent(); + fileContent.setFileId(fileMetadata.getId()); + fileContent.setFile(fileByte); + fileContentMapper.insert(fileContent); + return fileMetadata; + } + } + + } + public FileMetadata saveFile(File file, byte[] fileByte, String projectId) { final FileMetadata fileMetadata = new FileMetadata(); fileMetadata.setId(UUID.randomUUID().toString()); diff --git a/backend/src/main/resources/db/migration/V106__v1.17_release.sql b/backend/src/main/resources/db/migration/V106__v1.17_release.sql index 9bcf45f88d..eb0b64ef5f 100644 --- a/backend/src/main/resources/db/migration/V106__v1.17_release.sql +++ b/backend/src/main/resources/db/migration/V106__v1.17_release.sql @@ -223,4 +223,7 @@ SET latest = 1; UPDATE load_test SET latest = 1; +ALTER TABLE file_metadata ADD index file_name (NAME); +ALTER TABLE file_content ADD index file_id_index (file_id); +