Merge branch 'dev-jdk17' of http://139.196.179.195:3000/chenxudong/electromagnetic-data-new into dev-jdk17
# Conflicts: # electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/pojo/models/EdFileRelation.java # electrmangnetic/src/main/java/com/electromagnetic/industry/software/manage/service/serviceimpl/EdFileRelationServiceImpl.java 解决冲突。
This commit is contained in:
commit
4d145eaaea
|
|
@ -4,11 +4,17 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
|||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
|
||||
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
|
||||
import com.electromagnetic.industry.software.common.util.IdWorker;
|
||||
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("ed_file_favorite")
|
||||
public class EdFileFavorite {
|
||||
public class EdFileFavorite extends BaseModel{
|
||||
|
||||
@TableId(type = IdType.ASSIGN_UUID)
|
||||
private String id;
|
||||
|
|
@ -19,4 +25,15 @@ public class EdFileFavorite {
|
|||
@TableField("file_id")
|
||||
private String fileId;
|
||||
|
||||
public void newInit() {
|
||||
String userId = UserThreadLocal.getUserId();
|
||||
String newId = IdWorker.getSnowFlakeIdString();
|
||||
Date now = new Date();
|
||||
this.setId(newId);
|
||||
this.setCreatedTime(now);
|
||||
this.setCreatedBy(userId);
|
||||
this.setUpdatedTime(now);
|
||||
this.setUpdatedBy(userId);
|
||||
this.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,13 +2,18 @@ package com.electromagnetic.industry.software.manage.pojo.models;
|
|||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
|
||||
import com.electromagnetic.industry.software.common.util.IdWorker;
|
||||
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("ed_file_relation")
|
||||
public class EdFileRelation extends BaseModel {
|
||||
public class EdFileRelation extends BaseModel{
|
||||
|
||||
private String id;
|
||||
|
||||
|
|
@ -29,21 +34,15 @@ public class EdFileRelation extends BaseModel {
|
|||
*/
|
||||
private String relationship;
|
||||
|
||||
// /**
|
||||
// * 创建者 用户id
|
||||
// */
|
||||
// @TableField(value = "created_by")
|
||||
// private String createdBy;
|
||||
//
|
||||
// @TableField(value = "created_at", fill = FieldFill.INSERT)
|
||||
// private Date createdAt;
|
||||
//
|
||||
// /**
|
||||
// * 更新者 用户id
|
||||
// */
|
||||
// @TableField(value = "updated_by")
|
||||
// private String updatedBy;
|
||||
//
|
||||
// @TableField(value = "updated_at", fill = FieldFill.UPDATE)
|
||||
// private Date updatedAt;
|
||||
public void newInit() {
|
||||
String userId = UserThreadLocal.getUserId();
|
||||
String newId = IdWorker.getSnowFlakeIdString();
|
||||
Date now = new Date();
|
||||
this.setId(newId);
|
||||
this.setCreatedTime(now);
|
||||
this.setCreatedBy(userId);
|
||||
this.setUpdatedTime(now);
|
||||
this.setUpdatedBy(userId);
|
||||
this.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,4 +4,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||
import com.electromagnetic.industry.software.manage.pojo.models.EdFileFavorite;
|
||||
|
||||
public interface EdFileFavoriteService extends IService<EdFileFavorite> {
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
* @param userId
|
||||
* @param fileId
|
||||
* @return
|
||||
*/
|
||||
public boolean logicRemove (String userId, String fileId);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.tree.Tree;
|
||||
import cn.hutool.core.lang.tree.TreeNodeConfig;
|
||||
|
|
@ -8,6 +9,7 @@ import cn.hutool.core.lang.tree.TreeUtil;
|
|||
import cn.hutool.core.text.StrFormatter;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
|
|
@ -30,12 +32,15 @@ import jakarta.annotation.PostConstruct;
|
|||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
|
||||
import static com.electromagnetic.industry.software.common.enums.FileRepeatEnum.*;
|
||||
|
||||
@Component
|
||||
public class CommonService {
|
||||
|
|
@ -592,4 +597,168 @@ public class CommonService {
|
|||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
public ElectromagneticResult<?> upload(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) {
|
||||
Assert.isTrue(FileRepeatEnum.contains(strategy), "解决重名文件参数错误");
|
||||
String fileName = file.getOriginalFilename();
|
||||
String mainName = FileUtil.mainName(fileName);
|
||||
String suffix = FileUtil.getSuffix(fileName);
|
||||
Assert.isTrue(StrUtil.isNotEmpty(suffix), "文件类型不能为空");
|
||||
String destPath = getDbPathById(parentId);
|
||||
String strategyStr = FileRepeatEnum.getDesc(strategy);
|
||||
Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr));
|
||||
Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, NAME_VALID_MSG, destPath, strategyStr));
|
||||
// 查找下一层,看是否存在顶级定义相关文件,如果存在,则该层属于管理员层级定义的,不允许上传文件
|
||||
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getParentId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code);
|
||||
DataOwnEnum obj = DataOwnEnum.getEnumByCode(dataOwnCode);
|
||||
switch (Objects.requireNonNull(obj)) {
|
||||
case USER_FILE, USER_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code);
|
||||
case SYS_FILE, SYS_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
|
||||
case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code);
|
||||
default -> ElectromagneticResultUtil.fail("-1", "参数错误");
|
||||
}
|
||||
|
||||
long dirCount = edFileInfoMapper.selectCount(queryWrapper);
|
||||
Assert.isTrue(dirCount == 0, "文件 {} 上传到 {} 失败,层级结构不允许上传文件,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr);
|
||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||
newEdFileInfo.newInit();
|
||||
EdFileInfo finalEdFileInfo;
|
||||
// 首先检查是否是同名文件
|
||||
try {
|
||||
Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG);
|
||||
Long count = edFileInfoMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getParentId, parentId)
|
||||
.eq(EdFileInfo::getFileName, mainName)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.eq(EdFileInfo::getFileType, suffix));
|
||||
if (count > 0) {
|
||||
finalEdFileInfo = handUploadRepeatFile(parentId, file, strategy, dataOwnCode);
|
||||
} else {
|
||||
EdFileInfo parentFolderInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
|
||||
String codePathByDbPath = getCodePathByDbPath(parentFolderInfo.getFilePath());
|
||||
String fileCode = createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime());
|
||||
newEdFileInfo.setParentId(parentId)
|
||||
.setFileCode(fileCode)
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setFileName(mainName)
|
||||
.setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix))
|
||||
.setFileType(suffix)
|
||||
.setFileVersion(FILE_START_VERSION)
|
||||
.setFileSize(file.getSize())
|
||||
.setFilePath(parentFolderInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||
.setDataType(EleDataTypeEnum.FILE.code)
|
||||
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
edFileInfoMapper.insertOrUpdate(newEdFileInfo);
|
||||
String fileDestPath = getFileSysPath(newEdFileInfo.getId());
|
||||
FileUtil.writeFromStream(file.getInputStream(), fileDestPath);
|
||||
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
|
||||
finalEdFileInfo = newEdFileInfo;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String info = StrFormatter.format("文件 {} 为上传到 {} 失败,原因 {},同名同后缀的处理方式为 {}", fileName, destPath, e.getMessage(), strategyStr);
|
||||
newEdFileInfo.setParentId(parentId)
|
||||
.setFileName(mainName)
|
||||
.setSaveStatus(EleDataSaveStatusEnum.FAIL.code)
|
||||
.setFileType(suffix)
|
||||
.setFileVersion(0)
|
||||
.setFileCode("")
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setFileSize(file.getSize())
|
||||
.setDataType(EleDataTypeEnum.FILE.code)
|
||||
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||
.setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code);
|
||||
edFileInfoMapper.insertOrUpdate(newEdFileInfo);
|
||||
log.error(info, e);
|
||||
throw new BizException(info);
|
||||
}
|
||||
UserThreadLocal.setSuccessInfo(Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getParentId).orElse(""),
|
||||
Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileId).orElse(""),
|
||||
"文件 {} 为上传到 {} 成功,同名同后缀的处理方式为 {},存入的文件名为 {}",
|
||||
fileName,
|
||||
destPath,
|
||||
strategyStr,
|
||||
Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileName).orElse(fileName) + "." + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileType).orElse(suffix));
|
||||
return ElectromagneticResultUtil.success(newEdFileInfo.getId());
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public EdFileInfo handUploadRepeatFile(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) throws IOException {
|
||||
String fileName = file.getOriginalFilename();
|
||||
String mainName = FileUtil.mainName(fileName);
|
||||
String suffix = FileUtil.getSuffix(fileName);
|
||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||
newEdFileInfo.newInit();
|
||||
String timeStr = EleCommonUtil.getNowTimeStr();
|
||||
newEdFileInfo.setFileName(mainName)
|
||||
.setFileType(suffix)
|
||||
.setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix))
|
||||
.setFileTime(timeStr)
|
||||
.setFileSize(file.getSize())
|
||||
.setDataType(EleDataTypeEnum.FILE.code)
|
||||
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
if (strategy == REVERSION.code) {
|
||||
// 版本更新
|
||||
// step1:找到同名文件的MySQL对象
|
||||
List<EdFileInfo> parentFileInfos = edFileInfoMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getParentId, parentId)
|
||||
.eq(EdFileInfo::getFileName, mainName)
|
||||
.eq(EdFileInfo::getFileType, suffix));
|
||||
EdFileInfo parentFileInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
Integer maxFileVersion = Collections.max(parentFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion();
|
||||
// 找到当前展示的版本
|
||||
EdFileInfo effectFileInfo = parentFileInfos.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).toList().get(0);
|
||||
String codePathByDbPath = getCodePathByDbPath(effectFileInfo.getFilePath());
|
||||
String fileCode = createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, timeStr);
|
||||
// 将原有效的版本置为false
|
||||
edFileInfoMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class)
|
||||
.set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)
|
||||
.eq(EdFileInfo::getId, effectFileInfo.getId()));
|
||||
// 新增文件
|
||||
newEdFileInfo.setFileId(effectFileInfo.getFileId())
|
||||
.setParentId(parentId)
|
||||
.setFileCode(fileCode)
|
||||
.setFileVersion(maxFileVersion + 1)
|
||||
.setPreVersion(maxFileVersion)
|
||||
.setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||
.setFileCode(fileCode);
|
||||
} else if (strategy == NEW.code) {
|
||||
// 文件名加”_1“,存为新文件
|
||||
EdFileInfo parentFileInfo = edFileInfoMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
String codePathByDbPath = getCodePathByDbPath(parentFileInfo.getFilePath());
|
||||
String fileCode = createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime());
|
||||
newEdFileInfo.setParentId(parentId)
|
||||
.setFileCode(fileCode)
|
||||
.setFileVersion(FILE_START_VERSION)
|
||||
.setFileSize(file.getSize())
|
||||
.setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||
.setFileCode(fileCode);
|
||||
resetFileInfoName(newEdFileInfo);
|
||||
} else if (strategy == IGNORE.code) {
|
||||
return null;
|
||||
} else {
|
||||
throw new BizException("参数错误");
|
||||
}
|
||||
edFileInfoMapper.insert(newEdFileInfo);
|
||||
String fileDestPath = getFileSysPath(newEdFileInfo.getId());
|
||||
fileSystemService.save(file.getInputStream(), fileDestPath);
|
||||
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
|
||||
return newEdFileInfo;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
package com.electromagnetic.industry.software.manage.service.serviceimpl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
|
||||
import com.electromagnetic.industry.software.manage.mapper.EdFileFavoriteMapper;
|
||||
import com.electromagnetic.industry.software.manage.pojo.models.EdFileFavorite;
|
||||
import com.electromagnetic.industry.software.manage.service.EdFileFavoriteService;
|
||||
|
|
@ -8,4 +12,19 @@ import org.springframework.stereotype.Service;
|
|||
|
||||
@Service
|
||||
public class EdFileFavoriteServiceImpl extends ServiceImpl<EdFileFavoriteMapper, EdFileFavorite> implements EdFileFavoriteService {
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
* @param userId
|
||||
* @param fileId
|
||||
* @return
|
||||
*/
|
||||
public boolean logicRemove (String userId, String fileId) {
|
||||
LambdaUpdateWrapper <EdFileFavorite> updateWrapper = Wrappers.lambdaUpdate(EdFileFavorite.class)
|
||||
.eq(EdFileFavorite::getUserId, userId)
|
||||
.eq(EdFileFavorite::getFileId, fileId)
|
||||
.set(EdFileFavorite::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code);
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -866,94 +866,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ElectromagneticResult<?> upload(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) {
|
||||
Assert.isTrue(FileRepeatEnum.contains(strategy), "解决重名文件参数错误");
|
||||
String fileName = file.getOriginalFilename();
|
||||
String mainName = FileUtil.mainName(fileName);
|
||||
String suffix = FileUtil.getSuffix(fileName);
|
||||
Assert.isTrue(StrUtil.isNotEmpty(suffix), "文件类型不能为空");
|
||||
String destPath = commonService.getDbPathById(parentId);
|
||||
String strategyStr = FileRepeatEnum.getDesc(strategy);
|
||||
Assert.isTrue(!file.isEmpty(), StrFormatter.format("文件 {} 为空,文件上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr));
|
||||
Assert.isTrue(EleCommonUtil.isFileNameValid(file.getOriginalFilename()), StrFormatter.format("文件 {} {},上传到 {} 失败,同名同后缀的处理方式为 {}", fileName, NAME_VALID_MSG, destPath, strategyStr));
|
||||
// 查找下一层,看是否存在顶级定义相关文件,如果存在,则该层属于管理员层级定义的,不允许上传文件
|
||||
LambdaQueryWrapper<EdFileInfo> queryWrapper = Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getParentId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code);
|
||||
DataOwnEnum obj = DataOwnEnum.getEnumByCode(dataOwnCode);
|
||||
switch (Objects.requireNonNull(obj)) {
|
||||
case USER_FILE, USER_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.USER_PRJ.code);
|
||||
case SYS_FILE, SYS_PRJ -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code);
|
||||
case REPO_PRJ, REPO_FILE -> queryWrapper.eq(EdFileInfo::getDataOwn, DataOwnEnum.REPO_PRJ.code);
|
||||
default -> ElectromagneticResultUtil.fail("-1", "参数错误");
|
||||
}
|
||||
|
||||
long dirCount = this.baseMapper.selectCount(queryWrapper);
|
||||
Assert.isTrue(dirCount == 0, "文件 {} 上传到 {} 失败,层级结构不允许上传文件,同名同后缀的处理方式为 {}", fileName, destPath, strategyStr);
|
||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||
newEdFileInfo.newInit();
|
||||
EdFileInfo finalEdFileInfo;
|
||||
// 首先检查是否是同名文件
|
||||
try {
|
||||
Assert.isTrue(EleCommonUtil.isFileNameValid(fileName), NAME_VALID_MSG);
|
||||
Long count = this.baseMapper.selectCount(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getParentId, parentId)
|
||||
.eq(EdFileInfo::getFileName, mainName)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.eq(EdFileInfo::getFileType, suffix));
|
||||
if (count > 0) {
|
||||
finalEdFileInfo = handUploadRepeatFile(parentId, file, strategy, dataOwnCode);
|
||||
} else {
|
||||
EdFileInfo parentFolderInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
|
||||
String codePathByDbPath = commonService.getCodePathByDbPath(parentFolderInfo.getFilePath());
|
||||
String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime());
|
||||
newEdFileInfo.setParentId(parentId)
|
||||
.setFileCode(fileCode)
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setFileName(mainName)
|
||||
.setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix))
|
||||
.setFileType(suffix)
|
||||
.setFileVersion(FILE_START_VERSION)
|
||||
.setFileSize(file.getSize())
|
||||
.setFilePath(parentFolderInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||
.setDataType(EleDataTypeEnum.FILE.code)
|
||||
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
this.saveOrUpdate(newEdFileInfo);
|
||||
String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getId());
|
||||
FileUtil.writeFromStream(file.getInputStream(), fileDestPath);
|
||||
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
|
||||
finalEdFileInfo = newEdFileInfo;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
String info = StrFormatter.format("文件 {} 为上传到 {} 失败,原因 {},同名同后缀的处理方式为 {}", fileName, destPath, e.getMessage(), strategyStr);
|
||||
newEdFileInfo.setParentId(parentId)
|
||||
.setFileName(mainName)
|
||||
.setSaveStatus(EleDataSaveStatusEnum.FAIL.code)
|
||||
.setFileType(suffix)
|
||||
.setFileVersion(0)
|
||||
.setFileCode("")
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setFileSize(file.getSize())
|
||||
.setDataType(EleDataTypeEnum.FILE.code)
|
||||
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||
.setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code);
|
||||
this.saveOrUpdate(newEdFileInfo);
|
||||
log.error(info, e);
|
||||
throw new BizException(info);
|
||||
}
|
||||
UserThreadLocal.setSuccessInfo(Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getParentId).orElse(""),
|
||||
Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileId).orElse(""),
|
||||
"文件 {} 为上传到 {} 成功,同名同后缀的处理方式为 {},存入的文件名为 {}",
|
||||
fileName,
|
||||
destPath,
|
||||
strategyStr,
|
||||
Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileName).orElse(fileName) + "." + Optional.ofNullable(finalEdFileInfo).map(EdFileInfo::getFileType).orElse(suffix));
|
||||
return ElectromagneticResultUtil.success(true);
|
||||
return commonService.upload(parentId, file, strategy, dataOwnCode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1247,77 +1160,6 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
|
|||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public EdFileInfo handUploadRepeatFile(String parentId, MultipartFile file, Integer strategy, int dataOwnCode) throws IOException {
|
||||
String fileName = file.getOriginalFilename();
|
||||
String mainName = FileUtil.mainName(fileName);
|
||||
String suffix = FileUtil.getSuffix(fileName);
|
||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||
newEdFileInfo.newInit();
|
||||
String timeStr = EleCommonUtil.getNowTimeStr();
|
||||
newEdFileInfo.setFileName(mainName)
|
||||
.setFileType(suffix)
|
||||
.setFileContent(EleCommonUtil.parse(file.getInputStream(), suffix))
|
||||
.setFileTime(timeStr)
|
||||
.setFileSize(file.getSize())
|
||||
.setDataType(EleDataTypeEnum.FILE.code)
|
||||
.setDataStatus(PublishEnum.PUBLISHED.getCode())
|
||||
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
|
||||
.setDataOwn(dataOwnCode)
|
||||
.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
if (strategy == REVERSION.code) {
|
||||
// 版本更新
|
||||
// step1:找到同名文件的MySQL对象
|
||||
List<EdFileInfo> parentFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getParentId, parentId)
|
||||
.eq(EdFileInfo::getFileName, mainName)
|
||||
.eq(EdFileInfo::getFileType, suffix));
|
||||
EdFileInfo parentFileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
Integer maxFileVersion = Collections.max(parentFileInfos, Comparator.comparing(EdFileInfo::getFileVersion)).getFileVersion();
|
||||
// 找到当前展示的版本
|
||||
EdFileInfo effectFileInfo = parentFileInfos.stream().filter(e -> e.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)).toList().get(0);
|
||||
String codePathByDbPath = commonService.getCodePathByDbPath(effectFileInfo.getFilePath());
|
||||
String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, timeStr);
|
||||
// 将原有效的版本置为false
|
||||
this.baseMapper.update(new EdFileInfo(), Wrappers.lambdaUpdate(EdFileInfo.class)
|
||||
.set(EdFileInfo::getEffectFlag, EffectFlagEnum.NOT_EFFECTIVE.code)
|
||||
.eq(EdFileInfo::getId, effectFileInfo.getId()));
|
||||
// 新增文件
|
||||
newEdFileInfo.setFileId(effectFileInfo.getFileId())
|
||||
.setParentId(parentId)
|
||||
.setFileCode(fileCode)
|
||||
.setFileVersion(maxFileVersion + 1)
|
||||
.setPreVersion(maxFileVersion)
|
||||
.setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||
.setFileCode(fileCode);
|
||||
} else if (strategy == NEW.code) {
|
||||
// 文件名加”_1“,存为新文件
|
||||
EdFileInfo parentFileInfo = this.baseMapper.selectOne(Wrappers.lambdaQuery(EdFileInfo.class)
|
||||
.eq(EdFileInfo::getId, parentId)
|
||||
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code));
|
||||
String codePathByDbPath = commonService.getCodePathByDbPath(parentFileInfo.getFilePath());
|
||||
String fileCode = commonService.createFileCode(codePathByDbPath, suffix, FILE_START_VERSION, newEdFileInfo.getFileTime());
|
||||
newEdFileInfo.setParentId(parentId)
|
||||
.setFileCode(fileCode)
|
||||
.setFileVersion(FILE_START_VERSION)
|
||||
.setFileSize(file.getSize())
|
||||
.setFilePath(parentFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
|
||||
.setFileCode(fileCode);
|
||||
resetFileInfoName(newEdFileInfo);
|
||||
} else if (strategy == IGNORE.code) {
|
||||
return null;
|
||||
} else {
|
||||
throw new BizException("参数错误");
|
||||
}
|
||||
this.baseMapper.insert(newEdFileInfo);
|
||||
String fileDestPath = commonService.getFileSysPath(newEdFileInfo.getId());
|
||||
fileSystemService.save(file.getInputStream(), fileDestPath);
|
||||
EleCommonUtil.encryptFile(fileDestPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
|
||||
return newEdFileInfo;
|
||||
}
|
||||
|
||||
private String doSysFileMerge(String identifier, String fileName, Integer totalChunks, int dataOwnCode) {
|
||||
String currentUserId = UserThreadLocal.getUserId();
|
||||
for (int i = 1; i <= totalChunks; i++) {
|
||||
|
|
|
|||
|
|
@ -8,10 +8,7 @@ import cn.hutool.crypto.SecureUtil;
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
|
||||
import com.electromagnetic.industry.software.common.enums.EleDataSaveStatusEnum;
|
||||
import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
|
||||
import com.electromagnetic.industry.software.common.enums.PublishEnum;
|
||||
import com.electromagnetic.industry.software.common.enums.*;
|
||||
import com.electromagnetic.industry.software.common.exception.BizException;
|
||||
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
|
||||
import com.electromagnetic.industry.software.common.util.*;
|
||||
|
|
@ -37,7 +34,6 @@ import static com.electromagnetic.industry.software.common.cons.ElectromagneticC
|
|||
@Service
|
||||
public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper, EdFileRelation> implements EdFileRelationService {
|
||||
|
||||
private final EleLog log = new EleLog(EdFileInfoServiceImpl.class);
|
||||
@Resource
|
||||
EdFileInfoMapper edFileInfoMapper;
|
||||
@Resource
|
||||
|
|
@ -50,6 +46,7 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
|||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public Boolean createRelation(EdFileRelation edFileRelation) throws BizException {
|
||||
// 无法建立已建立的关系
|
||||
String queryId1 = edFileRelation.getId1();
|
||||
|
|
@ -63,17 +60,24 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
|||
queryWrapper.eq(EdFileRelation::getId1, queryId1).eq(EdFileRelation::getId2, queryId2)
|
||||
.or()
|
||||
.eq(EdFileRelation::getId1, queryId2).eq(EdFileRelation::getId2, queryId1);
|
||||
List<EdFileRelation> list = this.list(queryWrapper);
|
||||
if (!list.isEmpty()) {
|
||||
EdFileRelation relation = this.getOne(queryWrapper);
|
||||
if (relation != null && relation.getEffectFlag().equals(EffectFlagEnum.EFFECT.code)) {
|
||||
throw new BizException("请勿重复建立关系");
|
||||
}
|
||||
|
||||
edFileRelation.setId(IdWorker.getSnowFlakeIdString());
|
||||
edFileRelation.setCreatedBy(UserThreadLocal.getUserId());
|
||||
boolean isSaved = this.save(edFileRelation);
|
||||
boolean isSaved;
|
||||
if (relation != null) {
|
||||
relation.setRelationship(edFileRelation.getRelationship());
|
||||
relation.setEffectFlag(EffectFlagEnum.EFFECT.code);
|
||||
isSaved = this.updateById(relation);
|
||||
} else {
|
||||
EdFileRelation newRelation = new EdFileRelation();
|
||||
newRelation.newInit();
|
||||
BeanUtils.copyProperties(edFileRelation, newRelation);
|
||||
isSaved = this.save(newRelation);
|
||||
}
|
||||
if (isSaved) {
|
||||
EdFileInfo fileInfo = edFileInfoMapper.selectById(edFileRelation.getId());
|
||||
UserThreadLocal.setSuccessInfo(Optional.ofNullable(fileInfo).map(EdFileInfo::getParentId).orElse(""), edFileRelation.getId(), StrFormatter.format("关联了文件"));
|
||||
UserThreadLocal.setSuccessInfo("", edFileRelation.getId(), StrFormatter.format("关联了文件"));
|
||||
}
|
||||
return isSaved;
|
||||
}
|
||||
|
|
@ -87,10 +91,17 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
|||
@Override
|
||||
public Boolean cancelRelation(String id) {
|
||||
|
||||
boolean isRemoved = this.removeById(id);
|
||||
EdFileRelation edFileRelation = this.getById(id);
|
||||
if (edFileRelation == null) {
|
||||
throw new BizException("关系不存在");
|
||||
}
|
||||
if (edFileRelation.getEffectFlag().equals(EffectFlagEnum.NOT_EFFECTIVE.code)) {
|
||||
throw new BizException("关系已取消");
|
||||
}
|
||||
edFileRelation.setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code);
|
||||
boolean isRemoved = this.updateById(edFileRelation);
|
||||
if (isRemoved) {
|
||||
EdFileInfo fileInfo = edFileInfoMapper.selectById(id);
|
||||
UserThreadLocal.setSuccessInfo(Optional.ofNullable(fileInfo).map(EdFileInfo::getParentId).orElse(""), id, StrFormatter.format("取消了文件关联"));
|
||||
UserThreadLocal.setSuccessInfo("", id, StrFormatter.format("取消了文件关联"));
|
||||
}
|
||||
return isRemoved;
|
||||
}
|
||||
|
|
@ -172,10 +183,13 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
|||
}
|
||||
|
||||
private List<Edge> getEdges(String id) {
|
||||
|
||||
LambdaQueryWrapper<EdFileRelation> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(EdFileRelation::getId1, id)
|
||||
.or()
|
||||
.eq(EdFileRelation::getId2, id);
|
||||
queryWrapper.eq(EdFileRelation::getEffectFlag, EffectFlagEnum.EFFECT.code)
|
||||
.and(wrapper -> wrapper.eq(EdFileRelation::getId1, id)
|
||||
.or()
|
||||
.eq(EdFileRelation::getId2, id));
|
||||
|
||||
List<EdFileRelation> list = this.list(queryWrapper);
|
||||
List<Edge> edges = new ArrayList<>();
|
||||
for (EdFileRelation edFileRelation : list) {
|
||||
|
|
@ -214,7 +228,6 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
|||
.eq(EdFileInfo::getDataType, EleDataTypeEnum.FOLDER.code));
|
||||
Assert.isTrue(dirCount == 0, "层级目录不允许上传文件");
|
||||
|
||||
|
||||
EdFileInfo newEdFileInfo = new EdFileInfo();
|
||||
newEdFileInfo.newInit();
|
||||
try {
|
||||
|
|
@ -278,6 +291,18 @@ public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper,
|
|||
throw new BizException(info);
|
||||
}
|
||||
UserThreadLocal.setSuccessInfo(newEdFileInfo.getParentId(), newEdFileInfo.getId(), "上传了文件并建立了文件关系");
|
||||
// 上传文件
|
||||
ElectromagneticResult<?> uploadResult = commonService.upload(parentId, file, FileRepeatEnum.NEW.code, dataOwnCode);
|
||||
Assert.notNull(uploadResult.getData(), "上传失败");
|
||||
String relatedFileId = (String) uploadResult.getData();
|
||||
// 创建文件关系
|
||||
EdFileRelation relation = new EdFileRelation();
|
||||
relation.newInit();
|
||||
relation.setId1(id);
|
||||
relation.setId2(relatedFileId);
|
||||
relation.setRelationship(desc);
|
||||
createRelation(relation);
|
||||
UserThreadLocal.setSuccessInfo("", id, StrFormatter.format("建立了文件 {} 与文件 {} 的关系", id, relatedFileId));
|
||||
return ElectromagneticResultUtil.success(true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@
|
|||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk16</artifactId>
|
||||
<version>1.46</version>
|
||||
<artifactId>bcprov-jdk18on</artifactId>
|
||||
<version>1.77</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
|
|
|
|||
Loading…
Reference in New Issue