创建文件需要存到filestorge
This commit is contained in:
@@ -77,7 +77,7 @@ public class FileMetadataInfo implements Serializable {
|
||||
@TableField("fileStatus")
|
||||
private Integer fileStatus;
|
||||
|
||||
@Schema(description= "文件数据类型(仅文件有效,data_type=1时非空,标识模型文件/仿真报告/计算文件/结果曲线/结果云图)")
|
||||
@Schema(description= "文件业务类型(1:模型文件 2:仿真报告、3:计算文件、4:曲线文件、5:云图文件,6:网格文件,7:计算过程文件)")
|
||||
@TableField("fileType")
|
||||
private Integer fileType;
|
||||
|
||||
|
||||
@@ -58,9 +58,9 @@ public class FileStorage implements Serializable {
|
||||
@TableField("fileSuffix")
|
||||
private String fileSuffix;
|
||||
|
||||
@ApiModelProperty(value = "文件业务类型(如模型文件、仿真报告、计算文件、曲线文件、云图文件)")
|
||||
@ApiModelProperty(value = "文件业务类型(1:模型文件 2:仿真报告、3:计算文件、4:曲线文件、5:云图文件,6:网格文件,7:计算过程文件)")
|
||||
@TableField("fileBizType")
|
||||
private String fileBizType;
|
||||
private Integer fileBizType;
|
||||
|
||||
@ApiModelProperty(value = "文件大小(字节数,存储占用计算依据)")
|
||||
@TableField("fileSize")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.sdm.data.model.req;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.sdm.common.common.Constants;
|
||||
import com.sdm.common.entity.enums.FileBizTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -12,7 +12,7 @@ public class GetSimulationTaskFileReq extends BaseReq {
|
||||
@Schema(description = "文件所属项目节点uuid")
|
||||
private String uuid;
|
||||
|
||||
@Schema(description = "文件类型", implementation = Constants.FileBizType.class)
|
||||
@Schema(description = "文件类型", implementation = FileBizTypeEnum.class)
|
||||
Integer fileBizType;
|
||||
|
||||
@Schema(description = "文件名")
|
||||
|
||||
@@ -40,6 +40,6 @@ public class QueryBigFileReq extends BaseReq{
|
||||
private String fileSuffix;
|
||||
|
||||
@Schema(description = "文件业务类型(1:模型文件 2:仿真报告、3:计算文件、4:曲线文件、5:云图文件,6:网格文件,7:计算过程文件)")
|
||||
private String fileBizType;
|
||||
private Integer fileBizType;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.sdm.data.model.req;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import com.sdm.common.common.Constants;
|
||||
import com.sdm.common.entity.enums.FileBizTypeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
@@ -58,7 +58,7 @@ public class UploadFilesReq {
|
||||
@Schema(description = "文件名")
|
||||
private String fileName;
|
||||
|
||||
@Schema(description = "文件类型 1:模型文件 2:仿真报告 3:计算文件 4:曲线文件 5:云图文件",implementation = Constants.FileBizType.class)
|
||||
@Schema(description = "文件类型 1:模型文件 2:仿真报告 3:计算文件 4:曲线文件 5:云图文件",implementation = FileBizTypeEnum.class)
|
||||
private Integer fileType;
|
||||
|
||||
/**
|
||||
|
||||
@@ -99,6 +99,9 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
@Autowired
|
||||
private DataStorageAnalysis dataStorageAnalysis;
|
||||
|
||||
@Autowired
|
||||
IFileStorageService fileStorageService;
|
||||
|
||||
@Autowired
|
||||
private ApproveStrategyFactory approveStrategyFactory;
|
||||
|
||||
@@ -154,7 +157,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
minioService,
|
||||
fileMetadataInfoService,
|
||||
fileMetadataExtensionService,
|
||||
fileUserPermissionService
|
||||
fileUserPermissionService,
|
||||
fileStorageService
|
||||
);
|
||||
|
||||
// 获取并执行审批结果
|
||||
@@ -486,20 +490,24 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
}
|
||||
|
||||
String dirMinioObjectKey = deleteDirMetadataInfo.getObjectKey();
|
||||
Long deleteDirId = deleteDirMetadataInfo.getId();
|
||||
|
||||
boolean hasDeletePermission = fileUserPermissionService.hasFilePermission(deleteDirMetadataInfo.getId(), ThreadLocalContext.getUserId(), Constants.FilePermission.DELETE);
|
||||
boolean hasDeletePermission = fileUserPermissionService.hasFilePermission(deleteDirId, ThreadLocalContext.getUserId(), Constants.FilePermission.DELETE);
|
||||
if (!hasDeletePermission) {
|
||||
return SdmResponse.failed("没有删除权限");
|
||||
}
|
||||
|
||||
// mysql数据库批量删除文件信息
|
||||
LambdaQueryWrapper<FileMetadataInfo> fileMetaDataQuery = new LambdaQueryWrapper<>();
|
||||
fileMetaDataQuery.select(FileMetadataInfo::getId).likeRight(FileMetadataInfo::getObjectKey, dirMinioObjectKey);
|
||||
List<Long> deleteFileIdList = fileMetadataInfoService.listObjs(fileMetaDataQuery, id -> (Long) id);
|
||||
// 数据库批量删除文件信息
|
||||
LambdaQueryWrapper<FileStorage> fileMetaDataQuery = new LambdaQueryWrapper<>();
|
||||
fileMetaDataQuery.select(FileStorage::getFileId).eq(FileStorage::getDirId, deleteDirId);
|
||||
List<Long> deleteFileIdList = fileStorageService.listObjs(fileMetaDataQuery, id -> (Long) id);
|
||||
|
||||
|
||||
fileMetadataInfoService.removeByIds(deleteFileIdList);
|
||||
fileMetadataExtensionService.lambdaUpdate().in(FileMetadataExtension::getTFilemetaId, deleteFileIdList).remove();
|
||||
fileStorageService.lambdaUpdate().eq(FileStorage::getDirId, deleteDirId).remove();
|
||||
|
||||
// mysql数据库批量删除权限信息
|
||||
// 数据库批量删除权限信息
|
||||
fileUserPermissionService.lambdaUpdate().in(FileUserPermission::getTFilemetaId, deleteFileIdList).remove();
|
||||
|
||||
// minio文件系统批量删除文件
|
||||
@@ -986,13 +994,33 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
fileInfo.setFileGroupId(fileInfo.getId());
|
||||
fileMetadataInfoService.updateById(fileInfo);
|
||||
|
||||
// 循环查询当前文件每一级父目录id,并保存为一条file_storage,用户后续文件搜索统计
|
||||
Long parentDirId = dirMetadataInfo.getId();
|
||||
FileStorage fileStorage = new FileStorage();
|
||||
|
||||
fileStorage.setFileId(fileInfo.getId());
|
||||
fileStorage.setFileName(fileInfo.getOriginalName());
|
||||
fileStorage.setUserId(ThreadLocalContext.getUserId());
|
||||
fileStorage.setFileBizType(fileInfo.getFileType());
|
||||
// 文件后缀
|
||||
fileStorage.setFileSuffix(getSuffixWithoutDot(fileInfo.getOriginalName()));
|
||||
fileStorage.setFileSize(req.getFile().getSize());
|
||||
while (parentDirId != null) {
|
||||
fileStorage.setDirId(parentDirId);
|
||||
fileStorageService.save(fileStorage);
|
||||
parentDirId = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, parentDirId).oneOpt()
|
||||
.map(FileMetadataInfo::getParentId)
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 调用审批流,开启审批; 上面先入库拿到主键id,审批流创建失败后再回退数据
|
||||
// String templateId, String templateName,String approveContents,int approveAction:1:新增 2:修改 3:删除
|
||||
String approveContents = getApproveContents(fileInfo.getId(), "知识库文件新增", NumberConstants.ONE, fileInfo, null);
|
||||
boolean approveResult = launchFileDataApprove(req.getTemplateId(), req.getTemplateName(), approveContents, NumberConstants.ONE);
|
||||
if(!approveResult){
|
||||
log.error("uploadFiles create approveInit failed, params :{}", JSONObject.toJSONString(req));
|
||||
fileMetadataInfoService.removeById(fileInfo.getId());
|
||||
// - 回退MinIO中已上传的文件(删除该文件)。catch 里统一操作了
|
||||
//- 新增 file_metadata_info 信息不入表。
|
||||
//- 向前端返回“上传文件失败”。
|
||||
@@ -1027,6 +1055,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
}
|
||||
}
|
||||
|
||||
public static String getSuffixWithoutDot(String fileName) {
|
||||
int lastDotIndex = fileName.lastIndexOf('.');
|
||||
if (lastDotIndex == -1) {
|
||||
return ""; // 无后缀名时返回空字符串
|
||||
}
|
||||
return fileName.substring(lastDotIndex + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SdmResponse downloadRecord(AddDownloadRecordReq req) {
|
||||
return null;
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package com.sdm.data.service.impl.dataFileHandle;
|
||||
|
||||
import com.sdm.data.model.entity.FileMetadataInfo;
|
||||
import com.sdm.data.service.IFileMetadataExtensionService;
|
||||
import com.sdm.data.service.IFileMetadataInfoService;
|
||||
import com.sdm.data.service.IFileUserPermissionService;
|
||||
import com.sdm.data.service.IMinioService;
|
||||
import com.sdm.data.service.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
|
||||
@@ -17,4 +14,5 @@ public class ApproveContext {
|
||||
private IFileMetadataInfoService fileMetadataInfoService;
|
||||
private IFileMetadataExtensionService fileMetadataExtensionService;
|
||||
private IFileUserPermissionService fileUserPermissionService;
|
||||
private IFileStorageService fileStorageService;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,9 @@ import com.sdm.common.entity.constants.NumberConstants;
|
||||
import com.sdm.common.entity.enums.ApproveFileDataTypeEnum;
|
||||
import com.sdm.data.model.entity.FileMetadataExtension;
|
||||
import com.sdm.data.model.entity.FileMetadataInfo;
|
||||
import com.sdm.data.model.entity.FileStorage;
|
||||
import com.sdm.data.model.entity.FileUserPermission;
|
||||
import com.sdm.data.service.IFileMetadataExtensionService;
|
||||
import com.sdm.data.service.IFileMetadataInfoService;
|
||||
import com.sdm.data.service.IFileUserPermissionService;
|
||||
import com.sdm.data.service.IMinioService;
|
||||
import com.sdm.data.service.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -26,6 +24,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
|
||||
IMinioService minioService = context.getMinioService();
|
||||
IFileMetadataExtensionService fileMetadataExtensionService = context.getFileMetadataExtensionService();
|
||||
IFileUserPermissionService fileUserPermissionService = context.getFileUserPermissionService();
|
||||
IFileStorageService fileStorageService = context.getFileStorageService();
|
||||
|
||||
// 审批通过
|
||||
if (NumberConstants.TWO == status) {
|
||||
@@ -33,6 +32,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
|
||||
minioService.deleteFile(metadata.getObjectKey());
|
||||
// 删除数据库记录
|
||||
service.removeById(metadata.getId());
|
||||
fileStorageService.remove(new LambdaQueryWrapper<FileStorage>().eq(FileStorage::getFileId, metadata.getId()));
|
||||
fileMetadataExtensionService.remove(new LambdaQueryWrapper<FileMetadataExtension>().eq(FileMetadataExtension::getTFilemetaId, metadata.getId()));
|
||||
fileUserPermissionService.remove(new LambdaQueryWrapper<FileUserPermission>().eq(FileUserPermission::getTFilemetaId, metadata.getId()));
|
||||
|
||||
|
||||
@@ -5,11 +5,9 @@ import com.sdm.common.entity.constants.NumberConstants;
|
||||
import com.sdm.common.entity.enums.ApproveFileDataTypeEnum;
|
||||
import com.sdm.data.model.entity.FileMetadataExtension;
|
||||
import com.sdm.data.model.entity.FileMetadataInfo;
|
||||
import com.sdm.data.model.entity.FileStorage;
|
||||
import com.sdm.data.model.entity.FileUserPermission;
|
||||
import com.sdm.data.service.IFileMetadataExtensionService;
|
||||
import com.sdm.data.service.IFileMetadataInfoService;
|
||||
import com.sdm.data.service.IFileUserPermissionService;
|
||||
import com.sdm.data.service.IMinioService;
|
||||
import com.sdm.data.service.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@@ -24,6 +22,7 @@ public class UploadApproveStrategy implements ApproveStrategy {
|
||||
IMinioService minioService = context.getMinioService();
|
||||
IFileMetadataExtensionService fileMetadataExtensionService = context.getFileMetadataExtensionService();
|
||||
IFileUserPermissionService fileUserPermissionService = context.getFileUserPermissionService();
|
||||
IFileStorageService fileStorageService = context.getFileStorageService();
|
||||
|
||||
|
||||
// 审批通过
|
||||
@@ -40,6 +39,7 @@ public class UploadApproveStrategy implements ApproveStrategy {
|
||||
minioService.deleteFile(metadata.getObjectKey());
|
||||
// 删除数据库记录
|
||||
service.removeById(metadata.getId());
|
||||
fileStorageService.remove(new LambdaQueryWrapper<FileStorage>().eq(FileStorage::getFileId, metadata.getId()));
|
||||
fileMetadataExtensionService.remove(new LambdaQueryWrapper<FileMetadataExtension>().eq(FileMetadataExtension::getTFilemetaId, metadata.getId()));
|
||||
fileUserPermissionService.remove(new LambdaQueryWrapper<FileUserPermission>().eq(FileUserPermission::getTFilemetaId, metadata.getId()));
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user