优化事务和导出的逻辑。

This commit is contained in:
chenxudong 2024-12-25 15:02:06 +08:00
parent b9233d086c
commit 0c6ab12f3f
1 changed files with 7 additions and 6 deletions

View File

@ -43,6 +43,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -330,10 +331,10 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String tmpDir = uploadDataDir + currentUserId + File.separator + uuid + File.separator; String tmpDir = uploadDataDir + currentUserId + File.separator + uuid + File.separator;
ZipUtil.unzip(zipDirPath, tmpDir); ZipUtil.unzip(zipDirPath, tmpDir);
update2Database(zipDirPath); update2Database(zipDirPath);
return null; return ElectromagneticResultUtil.success(true);
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void update2Database(String prjDirPath) { public void update2Database(String prjDirPath) {
List<EdFileInfo> importFileInfos = JSONUtil.toList(prjDirPath + File.separator + "mysql.info", EdFileInfo.class); List<EdFileInfo> importFileInfos = JSONUtil.toList(prjDirPath + File.separator + "mysql.info", EdFileInfo.class);
@ -504,19 +505,19 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
List<EdFileInfo> folders = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FOLDER.code)).collect(Collectors.toList()); List<EdFileInfo> folders = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FOLDER.code)).collect(Collectors.toList());
List<EdFileInfo> files = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).collect(Collectors.toList()); List<EdFileInfo> files = resFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).collect(Collectors.toList());
for (EdFileInfo edFileInfo : folders) { for (EdFileInfo edFileInfo : folders) {
String destFolderPath = downloadDataDir + File.separator + commonService.getFileSysPath(edFileInfo.getFileId()); String destFolderPath = downloadDataDir + File.separator + prjName + File.separator + commonService.getFileSysPath(edFileInfo.getFileId());
fileSystemService.createDirectory(destFolderPath); fileSystemService.createDirectory(destFolderPath);
} }
for (EdFileInfo edFileInfo : files) { for (EdFileInfo edFileInfo : files) {
String filePath = commonService.getFileSysPath(edFileInfo.getFileId()) + edFileInfo.getFileCode() + "." + edFileInfo.getFileCode(); String filePath = commonService.getFileSysPath(edFileInfo.getFileId()) + edFileInfo.getFileCode() + "." + edFileInfo.getFileCode();
String destPath = downloadDataDir + File.separator + commonService.getDbPath(edFileInfo.getFileId()); String destPath = downloadDataDir + File.separator + prjName + File.separator + commonService.getDbPath(edFileInfo.getFileId());
fileSystemService.copyFile(filePath, destPath); fileSystemService.copyFile(filePath, destPath);
} }
String mysqlInfo = JSONUtil.toJsonStr(resFiles); String mysqlInfo = JSONUtil.toJsonStr(resFiles);
fileSystemService.writeStringToFile(downloadDataDir + File.separator + "mysql.info", mysqlInfo); fileSystemService.writeStringToFile(downloadDataDir + File.separator + prjName + File.separator + "mysql.info", mysqlInfo);
String exportZipFile = downloadDataDir + File.separator + prjName + ".zip"; String exportZipFile = downloadDataDir + File.separator + prjName + ".zip";
String exportColibFile = downloadDataDir + File.separator + prjName + EXPORT_FILE_SUFFIX; String exportColibFile = downloadDataDir + File.separator + prjName + EXPORT_FILE_SUFFIX;
ZipUtil.zip(downloadDataDir + File.separator + prjName, exportZipFile); ZipUtil.zip(downloadDataDir + File.separator + prjName + File.separator + prjName, exportZipFile);
AES aes = SecureUtil.aes(password.getBytes()); AES aes = SecureUtil.aes(password.getBytes());
try( try(
InputStream inputStream = Files.newInputStream(Paths.get(exportZipFile)); InputStream inputStream = Files.newInputStream(Paths.get(exportZipFile));