目前还 剩文件的导入没有调通。
This commit is contained in:
parent
adb64e25c1
commit
8f61c95cfe
|
|
@ -201,4 +201,17 @@ public class SysEdFileInfoController {
|
||||||
String userId = UserThreadLocal.getUserId();
|
String userId = UserThreadLocal.getUserId();
|
||||||
return ElectromagneticResultUtil.success(edFileInfoService.findFavorite(userId, fileInfoQueryDTO));
|
return ElectromagneticResultUtil.success(edFileInfoService.findFavorite(userId, fileInfoQueryDTO));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从收藏夹移除
|
||||||
|
*
|
||||||
|
* @param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/importPrj")
|
||||||
|
@UserOperation(value = "导入工程", modelName = UserOperationModuleEnum.USER_PRJ)
|
||||||
|
public ElectromagneticResult<?> importPrj(@RequestParam("file") MultipartFile file) {
|
||||||
|
return edFileInfoService.importPrj(file);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -176,17 +176,4 @@ public class UserEdFileInfoController {
|
||||||
return ElectromagneticResultUtil.success(edFileInfoService.removeFavorite(userId, id));
|
return ElectromagneticResultUtil.success(edFileInfoService.removeFavorite(userId, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从收藏夹移除
|
|
||||||
*
|
|
||||||
* @param
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@GetMapping("/importPrj")
|
|
||||||
@UserOperation(value = "导入工程", modelName = UserOperationModuleEnum.USER_PRJ)
|
|
||||||
public ElectromagneticResult<?> importPrj(@RequestParam("file") MultipartFile file) {
|
|
||||||
return ElectromagneticResultUtil.success(edFileInfoService.importPrj(file));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -237,7 +237,8 @@ public class CommonService {
|
||||||
case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code);
|
case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code);
|
||||||
default -> throw new BizException("参数错误");
|
default -> throw new BizException("参数错误");
|
||||||
}
|
}
|
||||||
return edFileInfoMapper.selectList(queryWrapper);
|
List<EdFileInfo> edFileInfos = edFileInfoMapper.selectList(queryWrapper);
|
||||||
|
return edFileInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.electromagnetic.industry.software.common.enums.*;
|
import com.electromagnetic.industry.software.common.enums.*;
|
||||||
|
import com.electromagnetic.industry.software.common.enums.FilePermission;
|
||||||
import com.electromagnetic.industry.software.common.exception.BizException;
|
import com.electromagnetic.industry.software.common.exception.BizException;
|
||||||
import com.electromagnetic.industry.software.common.exception.PermissionDeniedException;
|
import com.electromagnetic.industry.software.common.exception.PermissionDeniedException;
|
||||||
import com.electromagnetic.industry.software.common.pojo.RespPageVO;
|
import com.electromagnetic.industry.software.common.pojo.RespPageVO;
|
||||||
|
|
@ -28,6 +29,8 @@ import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
||||||
import com.electromagnetic.industry.software.common.util.*;
|
import com.electromagnetic.industry.software.common.util.*;
|
||||||
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
|
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
|
||||||
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
|
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
|
||||||
|
import com.electromagnetic.industry.software.manage.mapper.RoleMapper;
|
||||||
|
import com.electromagnetic.industry.software.manage.mapper.RolePermissionMapper;
|
||||||
import com.electromagnetic.industry.software.manage.mapper.UserMapper;
|
import com.electromagnetic.industry.software.manage.mapper.UserMapper;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.models.*;
|
import com.electromagnetic.industry.software.manage.pojo.models.*;
|
||||||
import com.electromagnetic.industry.software.manage.pojo.other.FileInfoVO;
|
import com.electromagnetic.industry.software.manage.pojo.other.FileInfoVO;
|
||||||
|
|
@ -52,6 +55,7 @@ import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
@ -85,6 +89,8 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
private EdFileRelationService edFileRelationService;
|
private EdFileRelationService edFileRelationService;
|
||||||
@Resource
|
@Resource
|
||||||
private RolePermissionService rolePermissionService;
|
private RolePermissionService rolePermissionService;
|
||||||
|
@Resource
|
||||||
|
private RoleMapper roleMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询文件列表
|
* 查询文件列表
|
||||||
|
|
@ -1521,32 +1527,114 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
commonService.publish(prjId, DataOwnEnum.SYS_PRJ.code);
|
commonService.publish(prjId, DataOwnEnum.SYS_PRJ.code);
|
||||||
// 将文件存入到数据库和文件系统
|
// 将文件存入到数据库和文件系统
|
||||||
updateImportPrj2FileSystem(file, prjId);
|
updateImportPrj2FileSystem(file, prjId);
|
||||||
|
// 添加所有权限
|
||||||
|
addRoleAndPermission(prjId);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
String info = "导入失败";
|
||||||
|
log.error(info, e);
|
||||||
|
throw new BizException(info, e);
|
||||||
|
}
|
||||||
|
return ElectromagneticResultUtil.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addRoleAndPermission(String prjId) {
|
||||||
|
// 首先添加角色,这里先假设只有北航,角色名称为“936c586c88e44df7a262f0ebb4dbe3ab”
|
||||||
|
Role role = roleMapper.selectOne(Wrappers.lambdaQuery(Role.class)
|
||||||
|
.eq(Role::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||||
|
.eq(Role::getRoleName, "936c586c88e44df7a262f0ebb4dbe3ab"));
|
||||||
|
if (Objects.isNull(role)) {
|
||||||
|
role = new Role();
|
||||||
|
role.newInit();
|
||||||
|
role.setRoleName("936c586c88e44df7a262f0ebb4dbe3ab");
|
||||||
|
role.setRoleDesc("针对北航内定的角色");
|
||||||
|
roleMapper.insert(role);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
|
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code)
|
||||||
|
.likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT));
|
||||||
|
Set<String> ids = edFileInfos.stream().map(e -> e.getId()).collect(Collectors.toSet());
|
||||||
|
ids.add(prjId);
|
||||||
|
for (String id : ids) {
|
||||||
|
for (FilePermission permission : FilePermission.values()) {
|
||||||
|
RolePermission rolePermission = new RolePermission();
|
||||||
|
rolePermission.newInit();
|
||||||
|
rolePermission.setRoleId(role.getId());
|
||||||
|
rolePermission.setFileId(id);
|
||||||
|
rolePermission.setPermissionCode(permission.getCode());
|
||||||
|
rolePermissionService.save(rolePermission);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateImportPrj2FileSystem(MultipartFile file, String prjId) throws IOException {
|
private void updateImportPrj2FileSystem(MultipartFile file, String prjId) throws IOException {
|
||||||
String tmpFile = elePropertyConfig.getEleTmpPath() + File.separator + file.getOriginalFilename();
|
String orgName = file.getOriginalFilename();
|
||||||
String mainName = FileUtil.mainName(tmpFile);
|
String tmpZipFile = elePropertyConfig.getEleTmpPath() + File.separator + orgName;
|
||||||
FileUtil.del(tmpFile);
|
String mainName = FileUtil.mainName(orgName);
|
||||||
FileUtil.writeFromStream(file.getInputStream(), tmpFile);
|
String suffix = FileUtil.getSuffix(orgName);
|
||||||
ZipUtil.unzip(tmpFile);
|
FileUtil.del(tmpZipFile);
|
||||||
List<File> files = FileUtil.loopFiles(elePropertyConfig.getEleTmpPath() + File.separator + mainName);
|
FileUtil.writeFromStream(file.getInputStream(), tmpZipFile);
|
||||||
|
String destDir = elePropertyConfig.getEleTmpPath() + File.separator + IdUtil.fastSimpleUUID();
|
||||||
|
try {
|
||||||
|
ZipUtil.unzip(tmpZipFile, destDir, StandardCharsets.UTF_8);
|
||||||
|
} catch (Exception e) {
|
||||||
|
ZipUtil.unzip(tmpZipFile, destDir, Charset.forName("GBK"));
|
||||||
|
}
|
||||||
|
List<File> files = FileUtil.loopFiles(destDir);
|
||||||
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
|
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||||
.likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT)
|
.likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT)
|
||||||
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code));
|
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code));
|
||||||
Map<String, EdFileInfo> fileIdMap = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, e -> e));
|
Map<String, String> idNameMap = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName));
|
||||||
|
idNameMap.put(prjId, mainName);
|
||||||
|
Map<String, EdFileInfo> filePathMap = new HashMap<>();
|
||||||
|
for (EdFileInfo edFileInfo : edFileInfos) {
|
||||||
|
StringBuilder names = new StringBuilder();
|
||||||
|
for (String id : edFileInfo.getFilePath().split(MYSQL_FILE_PATH_SPLIT)) {
|
||||||
|
String name = idNameMap.get(id);
|
||||||
|
names.append(MYSQL_FILE_PATH_SPLIT).append(name);
|
||||||
|
}
|
||||||
|
filePathMap.put(names.substring(1), edFileInfo);
|
||||||
|
}
|
||||||
|
String tmpPath = FileUtil.normalize(destDir);
|
||||||
|
for (File importFile : files) {
|
||||||
|
String parentDir = FileUtil.normalize(importFile.getParent());
|
||||||
|
String relativeFilePath = parentDir.replace(tmpPath, "");
|
||||||
|
while (relativeFilePath.startsWith(File.separator)) {
|
||||||
|
relativeFilePath = relativeFilePath.substring(1);
|
||||||
|
}
|
||||||
|
String fileType = FileUtil.getSuffix(importFile.getName());
|
||||||
|
relativeFilePath = relativeFilePath.startsWith("/") ? relativeFilePath.substring(1) : relativeFilePath;
|
||||||
|
relativeFilePath = relativeFilePath.replace("/", MYSQL_FILE_PATH_SPLIT);
|
||||||
|
EdFileInfo edFileInfo = filePathMap.get(relativeFilePath);
|
||||||
|
String id = edFileInfo.getId();
|
||||||
|
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||||
|
newEdFileInfo.newInit();
|
||||||
|
String fileCode = commonService.createFileCode(edFileInfo.getFilePath(), fileType, FILE_START_VERSION, newEdFileInfo.getFileTime());
|
||||||
|
newEdFileInfo.setParentId(id)
|
||||||
|
.setFileCode(fileCode)
|
||||||
|
.setSaveStatus(EleDataSaveStatusEnum.UPLOADING.code)
|
||||||
|
.setDataOwn(DataOwnEnum.SYS_FILE.code)
|
||||||
|
.setFileName(mainName)
|
||||||
|
.setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix))
|
||||||
|
.setFileType(suffix)
|
||||||
|
.setFileVersion(FILE_START_VERSION)
|
||||||
|
.setFileSize(file.getSize())
|
||||||
|
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||||
|
.setDataType(EleDataTypeEnum.FILE.code)
|
||||||
|
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||||
|
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||||
|
this.baseMapper.insert(newEdFileInfo);
|
||||||
|
String destPath = commonService.getPrjRootPath1(DataOwnEnum.SYS_FILE.code) + File.separator + newEdFileInfo.getId();
|
||||||
|
FileUtil.move(importFile, new File(destPath), false);
|
||||||
|
EleCommonUtil.encryptFile(destPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String updateImportPrj2Db(MultipartFile file) {
|
private String updateImportPrj2Db(MultipartFile file) {
|
||||||
String originalFilename = file.getOriginalFilename();
|
String originalFilename = file.getOriginalFilename();
|
||||||
String suffix = FileUtil.getSuffix(originalFilename);
|
String suffix = FileUtil.getSuffix(originalFilename);
|
||||||
String mainName = FileUtil.getName(originalFilename);
|
String mainName = FileUtil.mainName(originalFilename);
|
||||||
Assert.isTrue(StrUtil.equals(suffix, "zip"), "不支持 {} 格式的工程文件", suffix);
|
Assert.isTrue(StrUtil.equals(suffix, "zip"), "不支持 {} 格式的工程文件", suffix);
|
||||||
// 检查工程是否存在
|
// 检查工程是否存在
|
||||||
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileName, mainName)
|
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class).eq(EdFileInfo::getFileName, mainName)
|
||||||
|
|
@ -1597,7 +1685,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
||||||
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||||
this.baseMapper.insert(fileInfo);
|
this.baseMapper.insert(fileInfo);
|
||||||
UserThreadLocal.setSuccessInfo("", newPrjId, "创建 {} 项目成功。", mainName);
|
UserThreadLocal.setSuccessInfo("", newPrjId, "创建 {} 项目成功。", mainName);
|
||||||
return maxPrjId;
|
return newPrjId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue