This commit is contained in:
s2042968 2025-04-17 16:56:14 +08:00
commit 0dc0c1d658
13 changed files with 86 additions and 63 deletions

View File

@ -1,6 +1,7 @@
package com.electromagnetic.industry.software.manage.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.pojo.UserLoginInfo;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import org.apache.ibatis.reflection.MetaObject;
@ -14,21 +15,9 @@ public class EdMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasSetter("gmtCreate")) {
this.strictInsertFill(metaObject, "gmtCreate", Date.class, new Date());
}
if (metaObject.hasGetter("createdAt")) {
this.strictInsertFill(metaObject, "createdAt", Date.class, new Date());
}
if (metaObject.hasGetter("createdTime")) {
this.setFieldValByName("createdTime", new Date(), metaObject);
}
if (metaObject.hasGetter("gmtModified")) {
this.strictInsertFill(metaObject, "gmtModified", Date.class, new Date());
}
if (metaObject.hasGetter("updatedAt")) {
this.strictInsertFill(metaObject, "updatedAt", Date.class, new Date());
}
if (metaObject.hasGetter("createdBy")) {
this.setFieldValByName("createdBy", Optional.ofNullable(UserThreadLocal.getUser()).map(UserLoginInfo::getUserId).orElse(""), metaObject);
}
@ -38,16 +27,13 @@ public class EdMetaObjectHandler implements MetaObjectHandler {
if (metaObject.hasGetter("updatedBy")) {
this.setFieldValByName("updatedBy", Optional.ofNullable(UserThreadLocal.getUser()).map(UserLoginInfo::getUserId).orElse(""), metaObject);
}
if (metaObject.hasGetter("effectFlag")) {
this.setFieldValByName("effectFlag", EffectFlagEnum.EFFECT.code, metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
if (metaObject.hasGetter("gmtModified")) {
this.strictUpdateFill(metaObject, "gmtModified", Date.class, new Date());
}
if (metaObject.hasGetter("updatedAt")) {
this.strictUpdateFill(metaObject, "updatedAt", Date.class, new Date());
}
if (metaObject.hasGetter("updatedTime")) {
this.setFieldValByName("updatedTime", new Date(), metaObject);
}

View File

@ -25,6 +25,7 @@ public class RepoEdFileRelationController {
@Resource
EdFileInfoService edFileInfoService;
/**
* 创建文件关系
*

View File

@ -12,7 +12,6 @@ import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequ
import com.electromagnetic.industry.software.manage.pojo.req.UpdateRelationDTO;
import com.electromagnetic.industry.software.manage.service.EdFileInfoService;
import com.electromagnetic.industry.software.manage.service.EdFileRelationService;
import com.electromagnetic.industry.software.manage.service.serviceimpl.EdFileRelationServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

View File

@ -27,7 +27,4 @@ public class AiFileUploadRecord extends BaseModel {
@TableField(value = "file_size")
private long fileSize;
@TableField(value = "effect_flag")
private Integer effectFlag;
}

View File

@ -17,6 +17,4 @@ public class AiQuestionRecord extends BaseModel {
@TableField(value = "question")
private String question;
@TableField(value = "effect_flag")
private Integer effectFlag;
}

View File

@ -5,16 +5,17 @@ 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 lombok.EqualsAndHashCode;
import java.util.Date;
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("ed_file_favorite")
public class EdFileFavorite extends BaseModel{
public class EdFileFavorite extends BaseModel {
@TableId(type = IdType.ASSIGN_UUID)
private String id;

View File

@ -13,7 +13,7 @@ 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;

View File

@ -1,18 +1,15 @@
package com.electromagnetic.industry.software.manage.pojo.models;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("file_tag_relations")
public class FileTagRelation {
public class FileTagRelation extends BaseModel {
@TableId(type = IdType.ASSIGN_UUID)
private String id;
private String fileId;
private String tagId;
@TableField(fill = FieldFill.INSERT)
private Date createdTime;
private String createdBy;
}

View File

@ -7,10 +7,11 @@ public interface EdFileFavoriteService extends IService<EdFileFavorite> {
/**
* 逻辑删除
*
* @param userId
* @param fileId
* @return
*/
public boolean logicRemove (String userId, String fileId);
public boolean logicRemove(String userId, String fileId);
}

View File

@ -1,11 +1,9 @@
package com.electromagnetic.industry.software.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.manage.pojo.models.EdFileRelation;
import com.electromagnetic.industry.software.manage.pojo.req.CheckNameUniqueRequest;
import com.electromagnetic.industry.software.manage.pojo.resp.FileRelationViewVO;
import org.springframework.web.multipart.MultipartFile;
public interface EdFileRelationService extends IService<EdFileRelation> {

View File

@ -1,6 +1,5 @@
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;
@ -15,12 +14,13 @@ public class EdFileFavoriteServiceImpl extends ServiceImpl<EdFileFavoriteMapper,
/**
* 逻辑删除
*
* @param userId
* @param fileId
* @return
*/
public boolean logicRemove (String userId, String fileId) {
LambdaUpdateWrapper <EdFileFavorite> updateWrapper = Wrappers.lambdaUpdate(EdFileFavorite.class)
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);

View File

@ -27,7 +27,8 @@ import com.electromagnetic.industry.software.common.pojo.RespPageVO;
import com.electromagnetic.industry.software.common.resp.ElectromagneticResult;
import com.electromagnetic.industry.software.common.util.*;
import com.electromagnetic.industry.software.manage.config.ElePropertyConfig;
import com.electromagnetic.industry.software.manage.mapper.*;
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
import com.electromagnetic.industry.software.manage.mapper.UserMapper;
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.UploadRecordDTO;
@ -464,18 +465,19 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
OutputStream outputStream = Files.newOutputStream(Paths.get(zipDirPath))
) {
aes.decrypt(inputStream, outputStream, true);
} catch (Exception e) {
String info = "文件上传错误";
log.error(info, e);
throw new BizException(info);
}
String uuid = IdUtil.fastSimpleUUID();
String tmpDir = elePropertyConfig.getUploadDataDir(dataOwnCode) + currentUserId + File.separator + uuid + File.separator;
ZipUtil.unzip(zipDirPath, tmpDir);
update2Database(tmpDir, dataOwnCode);
fileSystemService.deleteFile(zipDirPath, destColibPath);
UserThreadLocal.setSuccessInfo("", "", "导入数据库成功");
UserThreadLocal.setSuccessInfo("", "", "导入数据库成功,文件名称为 " + mainName);
return ElectromagneticResultUtil.success(true);
} catch (Exception e) {
String info = "文件上传错误";
log.error(info, e);
throw new BizException(info);
} finally {
fileSystemService.deleteFile(zipDirPath, destColibPath);
}
}
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
@ -494,21 +496,61 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
}
private void updateFileRelationInfo(String prjDirPath) {
String path = prjDirPath + File.separator + ED_TAG_RELATIONS + ".json";
// UNIQUE KEY id1 + id2 prd没有做详细说明此处先按照最新修改时间原则来做
String path = prjDirPath + File.separator + ED_FILE_RELATION + ".json";
List<EdFileRelation> relations = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), EdFileRelation.class);
edFileRelationService.saveOrUpdateBatch(relations);
for (EdFileRelation importRelation : relations) {
EdFileRelation dbRelation = edFileRelationService.getBaseMapper().selectOne(Wrappers.lambdaQuery(EdFileRelation.class)
.eq(EdFileRelation::getId1, importRelation.getId())
.eq(EdFileRelation::getId2, importRelation.getId2()));
if (Objects.isNull(dbRelation)) {
edFileRelationService.save(importRelation);
} else {
// 如果导入的比线上的新则新增
if (importRelation.getUpdatedTime().after(dbRelation.getUpdatedTime())) {
edFileRelationService.save(importRelation);
}
}
}
}
private void updateFileTageInfo(String prjDirPath) {
String path = prjDirPath + File.separator + USER_ACCESS_LOG + ".json";
// UNIQUE KEY fileId + tagId
String path = prjDirPath + File.separator + ED_TAG_RELATIONS + ".json";
List<FileTagRelation> relations = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), FileTagRelation.class);
fileTagRelationService.saveOrUpdateBatch(relations);
for (FileTagRelation importRelation : relations) {
FileTagRelation dbRelation = fileTagRelationService.getBaseMapper().selectOne(Wrappers.lambdaQuery(FileTagRelation.class)
.eq(FileTagRelation::getTagId, importRelation.getId())
.eq(FileTagRelation::getFileId, importRelation.getFileId()));
if (Objects.isNull(dbRelation)) {
fileTagRelationService.save(importRelation);
} else {
if (!Objects.equals(importRelation.getEffectFlag(), dbRelation.getEffectFlag())) {
dbRelation.setEffectFlag(EffectFlagEnum.NOT_EFFECTIVE.code);
fileTagRelationService.saveOrUpdate(dbRelation);
}
}
}
}
private void updateCollectionInfo(String prjDirPath) {
// UNIQUE KEY userId + fileId
String path = prjDirPath + File.separator + ED_FILE_FAVORITE + ".json";
List<EdFileFavorite> edFileFavorites = JSONUtil.toList(FileUtil.readString(path, Charset.defaultCharset()), EdFileFavorite.class);
fileFavoriteService.saveOrUpdateBatch(edFileFavorites);
String userId = UserThreadLocal.getUserId();
for (EdFileFavorite importFileFavorite : edFileFavorites) {
EdFileFavorite dbFileFavorite = fileFavoriteService.getBaseMapper().selectOne(Wrappers.lambdaQuery(EdFileFavorite.class)
.eq(EdFileFavorite::getCreatedBy, userId)
.eq(EdFileFavorite::getFileId, importFileFavorite.getFileId()));
if (Objects.isNull(dbFileFavorite)) {
fileFavoriteService.save(importFileFavorite);
} else {
if (importFileFavorite.getUpdatedTime().after(dbFileFavorite.getUpdatedTime())) {
dbFileFavorite.setEffectFlag(importFileFavorite.getEffectFlag());
fileFavoriteService.saveOrUpdate(dbFileFavorite);
}
}
}
}
private void updatePrjInfo(String prjDirPath, Integer dataOwnCode) {
@ -641,7 +683,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
String id = saveObj.getId();
String preVersionId = dbVersionRelation.get(id);
EdFileInfo tmp = importIdMap.get(preVersionId);
saveObj.setPreVersion(ObjUtil.isNull(tmp) ? null : tmp.getFileVersion());
saveObj.setPreVersion(Optional.ofNullable(tmp).map(EdFileInfo::getFileVersion).orElse(null));
int effect = ObjUtil.equals(saveObj.getId(), effectId) ? EffectFlagEnum.EFFECT.code : EffectFlagEnum.NOT_EFFECTIVE.code;
saveObj.setEffectFlag(effect);
}
@ -692,7 +734,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
private void update2FileSystem(Set<EdFileInfo> needMove2FileSystemFiles, String prjDirPath, int dataOwnCode) {
List<EdFileInfo> files = needMove2FileSystemFiles.stream().filter(e -> e.getDataType().equals(EleDataTypeEnum.FILE.code)).toList();
List<File> files1 = FileUtil.loopFiles(new File(prjDirPath), file -> file.isDirectory() && file.getName().startsWith(EXPORT_PRJ_NAME));
List<File> files1 = Arrays.stream(Objects.requireNonNull(new File(prjDirPath).listFiles())).filter(e -> e.isDirectory() && e.getName().startsWith(EXPORT_PRJ_NAME)).toList();
String prjFilePath = files1.get(0).getAbsolutePath();
for (EdFileInfo edFileInfo : files) {
String id = edFileInfo.getId();
@ -748,7 +790,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
// 导出标签相关信息
exportFileTagInfo(nowTimeStr, exportFileIds, userDownloadDataDir);
// 导出操作记录相关
exportLogInfo(nowTimeStr, exportFileIds, userDownloadDataDir);
exportLogInfo(nowTimeStr, userDownloadDataDir);
String prjDirPath = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr;
String exportZipFile = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + ".zip";
@ -758,7 +800,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
AES aes = SecureUtil.aes(FILE_SEC_PASSWD.getBytes());
try (
InputStream inputStream = Files.newInputStream(Paths.get(exportZipFile));
OutputStream outputStream = Files.newOutputStream(Paths.get(exportColibFile));
OutputStream outputStream = Files.newOutputStream(Paths.get(exportColibFile))
) {
aes.encrypt(inputStream, outputStream, true);
} catch (Exception e) {
@ -772,11 +814,12 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
FileSystemResource fileSystemResource = new FileSystemResource(file);
HttpHeaders headers = new HttpHeaders();
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
String fileName = Base64.encode(fileSystemResource.getFilename() + "_" + nowTimeStr);
String tmpFileName = fileSystemResource.getFilename() + "_" + nowTimeStr;
String fileName = Base64.encode(tmpFileName);
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
response.setHeader("content-disposition", "attachment;filename=" + fileName);
UserThreadLocal.setSuccessInfo("", "", "导出数据库成功");
UserThreadLocal.setSuccessInfo("", "", "导出数据库成功,文件名称为" + tmpFileName);
// 构建响应实体(可以返回<byte[]或Resource返回类型取决body入参类型)
return ResponseEntity
.ok()
@ -786,7 +829,7 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
.body(new InputStreamResource(fileSystemResource.getInputStream()));
}
private void exportLogInfo(String nowTimeStr, List<String> exportFileIds, String userDownloadDataDir) {
private void exportLogInfo(String nowTimeStr, String userDownloadDataDir) {
List<UserAccessLog> userAccessLogs = userAccessLogService.getBaseMapper().selectList(null);
String json = JSONUtil.toJsonStr(userAccessLogs);
String path = userDownloadDataDir + File.separator + EXPORT_PRJ_NAME + "_" + nowTimeStr + File.separator + USER_ACCESS_LOG + ".json";

View File

@ -5,9 +5,11 @@ import cn.hutool.core.text.StrFormatter;
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.*;
import com.electromagnetic.industry.software.common.enums.EffectFlagEnum;
import com.electromagnetic.industry.software.common.enums.EleDataTypeEnum;
import com.electromagnetic.industry.software.common.exception.BizException;
import com.electromagnetic.industry.software.common.util.*;
import com.electromagnetic.industry.software.common.util.EleCommonUtil;
import com.electromagnetic.industry.software.common.util.UserThreadLocal;
import com.electromagnetic.industry.software.manage.mapper.EdFileInfoMapper;
import com.electromagnetic.industry.software.manage.mapper.EdFileRelationMapper;
import com.electromagnetic.industry.software.manage.pojo.models.EdFileInfo;
@ -24,7 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.*;
import static com.electromagnetic.industry.software.common.cons.ElectromagneticConstants.NAME_VALID_MSG;
@Service
public class EdFileRelationServiceImpl extends ServiceImpl<EdFileRelationMapper, EdFileRelation> implements EdFileRelationService {