创建文件需要存到filestorge
This commit is contained in:
@@ -50,72 +50,6 @@ public class Constants {
|
||||
}
|
||||
}
|
||||
|
||||
@Schema(description = "文件业务类型枚举")
|
||||
public enum FileBizType {
|
||||
/**
|
||||
* 模型文件
|
||||
*/
|
||||
@Schema(description = "模型文件", example = "1")
|
||||
MODEL_FILE(1),
|
||||
|
||||
/**
|
||||
* 仿真报告
|
||||
*/
|
||||
@Schema(description = "仿真报告", example = "2")
|
||||
REPORT_FILE(2),
|
||||
|
||||
/**
|
||||
* 计算文件
|
||||
*/
|
||||
@Schema(description = "计算文件", example = "3")
|
||||
COMPUTE_FILE(3),
|
||||
|
||||
/**
|
||||
* 曲线文件
|
||||
*/
|
||||
@Schema(description = "曲线文件", example = "4")
|
||||
CURVE_FILE(4),
|
||||
/**
|
||||
* 云图文件
|
||||
*/
|
||||
@Schema(description = "云图文件", example = "5")
|
||||
CLOUD_FILE(5),
|
||||
|
||||
/**
|
||||
* 网格文件
|
||||
*/
|
||||
@Schema(description = "网格文件", example = "6")
|
||||
GRID_FILE(6),
|
||||
|
||||
/**
|
||||
* 计算过程文件
|
||||
*/
|
||||
@Schema(description = "计算过程文件", example = "7")
|
||||
COMPUTE_PROCESS_FILE(7),
|
||||
|
||||
/**
|
||||
* 项目文件
|
||||
*/
|
||||
@Schema(description = "项目 文件", example = "6")
|
||||
PROJECT_FILE(101),
|
||||
|
||||
/**
|
||||
* 学科文件
|
||||
*/
|
||||
@Schema(description = "学科 文件", example = "7")
|
||||
DISCIPLINE_MAJOR_FILE(102);
|
||||
|
||||
int value;
|
||||
|
||||
FileBizType(int i) {
|
||||
value = i;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@Schema(description = "文件夹类型枚举")
|
||||
public enum DirType {
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.sdm.common.entity.enums;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
@Schema(description = "文件业务类型枚举")
|
||||
|
||||
public enum FileBizTypeEnum {
|
||||
/**
|
||||
* 模型文件
|
||||
*/
|
||||
@Schema(description = "模型文件", example = "1")
|
||||
MODEL_FILE(1),
|
||||
|
||||
/**
|
||||
* 仿真报告
|
||||
*/
|
||||
@Schema(description = "仿真报告", example = "2")
|
||||
REPORT_FILE(2),
|
||||
|
||||
/**
|
||||
* 计算文件
|
||||
*/
|
||||
@Schema(description = "计算文件", example = "3")
|
||||
COMPUTE_FILE(3),
|
||||
|
||||
/**
|
||||
* 曲线文件
|
||||
*/
|
||||
@Schema(description = "曲线文件", example = "4")
|
||||
CURVE_FILE(4),
|
||||
/**
|
||||
* 云图文件
|
||||
*/
|
||||
@Schema(description = "云图文件", example = "5")
|
||||
CLOUD_FILE(5),
|
||||
|
||||
/**
|
||||
* 网格文件
|
||||
*/
|
||||
@Schema(description = "网格文件", example = "6")
|
||||
GRID_FILE(6),
|
||||
|
||||
/**
|
||||
* 计算过程文件
|
||||
*/
|
||||
@Schema(description = "计算过程文件", example = "7")
|
||||
COMPUTE_PROCESS_FILE(7),
|
||||
|
||||
/**
|
||||
* 项目文件
|
||||
*/
|
||||
@Schema(description = "项目 文件", example = "101")
|
||||
PROJECT_FILE(101),
|
||||
|
||||
/**
|
||||
* 学科文件
|
||||
*/
|
||||
@Schema(description = "学科 文件", example = "102")
|
||||
DISCIPLINE_MAJOR_FILE(102);
|
||||
|
||||
int value;
|
||||
|
||||
FileBizTypeEnum(int i) {
|
||||
value = i;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
|
||||
<insert id="batchAddSimulationNodes" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into simulation_node
|
||||
(uuid,nodeName,nodeCode,englishName,nodeType,nodeSubType,nodeStatus,parentId,folderId,nodeLevel,beginTime,endTime,finishTime,progress,
|
||||
(uuid,ownRootNodeUuid,nodeName,nodeCode,englishName,nodeType,nodeSubType,nodeStatus,parentId,folderId,nodeLevel,beginTime,endTime,finishTime,progress,
|
||||
achieveStatus,nodeVersion,tenantId,description,detailImgUrl,creator,create_time,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10) values
|
||||
<foreach collection='list' item='addNode' index='index' separator=','>
|
||||
(#{addNode.uuid},#{addNode.nodeName},#{addNode.nodeCode},#{addNode.englishName},#{addNode.nodeType},#{addNode.nodeSubType},'0',#{addNode.parentId},
|
||||
(#{addNode.uuid},#{addNode.ownRootNodeUuid},#{addNode.nodeName},#{addNode.nodeCode},#{addNode.englishName},#{addNode.nodeType},#{addNode.nodeSubType},'0',#{addNode.parentId},
|
||||
'',1,#{addNode.beginTime},#{addNode.endTime},'',1,#{addNode.achieveStatus},'1',#{addNode.tenantId},#{addNode.description},
|
||||
#{addNode.detailImgUrl},#{addNode.creator},#{addNode.createTime},#{addNode.Tag1,typeHandler=com.sdm.project.handler.ListStringTypeHandler},#{addNode.Tag2,typeHandler=com.sdm.project.handler.ListStringTypeHandler},
|
||||
#{addNode.Tag3,typeHandler=com.sdm.project.handler.ListStringTypeHandler},#{addNode.Tag4,typeHandler=com.sdm.project.handler.ListStringTypeHandler},
|
||||
|
||||
Reference in New Issue
Block a user