批量处理工况库和文件关系

This commit is contained in:
2025-12-03 11:21:39 +08:00
parent 4105f06d1a
commit 9c6e3b839a
8 changed files with 118 additions and 30 deletions

View File

@@ -52,7 +52,7 @@ public class DataStorageAnalysisController {
return dataStorageAnalysis.getNodeSizeByNodeType(queryNodeType, uuid, intervalMonths, targetYm);
} catch (Exception e) {
log.error("获取文件空间占用失败", e);
return SdmResponse.failed("获取文件空间占用");
return SdmResponse.failed("获取文件空间占用失败");
}
}

View File

@@ -6,7 +6,6 @@ import com.sdm.common.entity.req.data.GetFileSimulationMappingReq;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.feign.inter.data.IFileSimulationMappingFeignClient;
import com.sdm.common.entity.req.data.SaveFileSimulationMappingReq;
import com.sdm.data.model.entity.FileSimulationMapping;
import com.sdm.data.service.IFileSimulationMappingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -16,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -34,8 +34,8 @@ public class FileSimulationMappingController implements IFileSimulationMappingFe
* 保存工况任务与文件绑定关系
*/
@PostMapping("/saveFileSimulationMapping")
public SdmResponse saveFileSimulationMapping(@RequestBody SaveFileSimulationMappingReq saveFileSimulationMappingReq) {
return fileSimulationMappingService.saveSimulationAndFileMapping(saveFileSimulationMappingReq);
public SdmResponse batchSaveFileSimulationMapping(@RequestBody List<SaveFileSimulationMappingReq> saveFileSimulationMappingReq) {
return fileSimulationMappingService.batchSaveFileSimulationMapping(saveFileSimulationMappingReq);
}
/**
@@ -47,5 +47,16 @@ public class FileSimulationMappingController implements IFileSimulationMappingFe
}
/**
* 根据工况库ID版本号批量查询文件信息
* @param getFileSimulationMappingReq
* @return taskFileMapping; key: 工况任务ID; value: 文件信息列表
*/
@PostMapping("/batchGetFileSimulationMappingBySimulationPoolIdAndVersion")
public SdmResponse<Map<String, List<FileMetadataInfoResp>>> batchGetFileSimulationMappingBySimulationPoolIdAndVersion(@RequestBody GetFileSimulationMappingReq getFileSimulationMappingReq){
return fileSimulationMappingService.batchGetFileSimulationMappingBySimulationPoolIdAndVersion(getFileSimulationMappingReq);
}
}

View File

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.common.entity.req.data.SaveFileSimulationMappingReq;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -20,10 +21,17 @@ import java.util.List;
public interface IFileSimulationMappingService extends IService<FileSimulationMapping> {
void saveFileSimulationMapping(Long fileId,Integer simulationPoolId,String simulationPoolVersion,List<String> simulationPoolTaskIds);
SdmResponse saveSimulationAndFileMapping(SaveFileSimulationMappingReq saveFileSimulationMappingReq);
SdmResponse batchSaveFileSimulationMapping(List<SaveFileSimulationMappingReq> saveFileSimulationMappingReq);
/**
* 根据工况库ID版本号工况任务ID查询文件信息
*/
SdmResponse<List<FileMetadataInfoResp>> getFileSimulationMappingBySimulationPoolIdAndVersionAndTaskId(GetFileSimulationMappingReq getFileSimulationMappingReq);
/**
* 根据工况库ID版本号批量查询文件信息
* @param getFileSimulationMappingReq
* @return taskFileMapping; key: 工况任务ID; value: 文件信息列表
*/
SdmResponse<Map<String, List<FileMetadataInfoResp>>> batchGetFileSimulationMappingBySimulationPoolIdAndVersion(GetFileSimulationMappingReq getFileSimulationMappingReq);
}

View File

@@ -253,17 +253,35 @@ public class DimensionTemplateServiceImpl extends ServiceImpl<DimensionTemplateM
// 2、再查询原本的普通文件夹信息需要isProjectDimension=true 只查询普通文件夹,不查询节点文件夹,union all 查询node的fileId 后 分页查询
Long parentDirId;
List<Long> dirInfos = null;
if (ObjectUtils.isNotEmpty(req.getFileId())) {
//fileId 不为空,是右侧点击进入文件夹下一层级查询
parentDirId = req.getFileId();
Optional<FileMetadataInfo> parentDirInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, parentDirId).oneOpt();
if (!parentDirInfo.isPresent()) {
return SdmResponse.failed("父文件夹不存在");
}
} else {
if(ObjectUtils.isEmpty(req.getFileId())){
// 第一次进入数据总览页面,右侧不展示文件和文件夹
return SdmResponse.success();
}
if(0L==req.getFileId()){
// 和前端规定 0=触发根目录按钮,相当于获取左侧文件树的根节点文件夹
GetSimulationNodeTreeReq getSimulationNodeTreeReq = new GetSimulationNodeTreeReq();
getSimulationNodeTreeReq.setDimensionTemplateId(req.getDimensionTemplateId());
getSimulationNodeTreeReq.setFileId(null);
SdmResponse<List<FileMetadataInfo>> nodeDirInfos = getSimulationNodeTree(getSimulationNodeTreeReq);
if (nodeDirInfos.isSuccess() && ObjectUtils.isNotEmpty(nodeDirInfos.getData())) {
dirInfos = nodeDirInfos.getData().stream().map(FileMetadataInfo::getId).toList();
}
PageHelper.startPage(req.getCurrent(), req.getSize());
List<FileMetadataInfo> fileMetadataInfos = fileMetadataInfoService.lambdaQuery().in(FileMetadataInfo::getId, dirInfos).list();
PageInfo<FileMetadataInfo> page = new PageInfo<>(fileMetadataInfos);
return PageUtils.getJsonObjectSdmResponse(fileMetadataInfos, page);
}
//fileId 不为空也不为0是右侧点击进入文件夹下一层级查询
parentDirId = req.getFileId();
Optional<FileMetadataInfo> parentDirInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, parentDirId).oneOpt();
if (!parentDirInfo.isPresent()) {
return SdmResponse.failed("父文件夹不存在");
}
// relatedResourceUuid和relatedResourceUuidOwnType不为空才是节点文件夹才需要查询子节点文件夹文件
GetSimulationNodeTreeReq getSimulationNodeTreeReq = new GetSimulationNodeTreeReq();
getSimulationNodeTreeReq.setDimensionTemplateId(req.getDimensionTemplateId());

View File

@@ -1,6 +1,5 @@
package com.sdm.data.service.impl;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.GetFileSimulationMappingReq;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
@@ -14,9 +13,12 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
@@ -30,7 +32,8 @@ import java.util.List;
public class FileSimulationMappingServiceImpl extends ServiceImpl<FileSimulationMappingMapper, FileSimulationMapping> implements IFileSimulationMappingService {
@Autowired
IFileMetadataInfoService fileMetadataInfoService;
public void saveFileSimulationMapping(Long fileId,Integer simulationPoolId,String simulationPoolVersion,List<String> simulationPoolTaskIds){
public void saveFileSimulationMapping(Long fileId, Integer simulationPoolId, String simulationPoolVersion, List<String> simulationPoolTaskIds) {
// 先删除原先所有的文件绑定关系
this.lambdaUpdate().eq(FileSimulationMapping::getFileId, fileId).remove();
// 再新增新的文件绑定关系
@@ -45,16 +48,21 @@ public class FileSimulationMappingServiceImpl extends ServiceImpl<FileSimulation
}
@Override
public SdmResponse saveSimulationAndFileMapping(SaveFileSimulationMappingReq saveFileSimulationMappingReq) {
saveFileSimulationMappingReq.getFileIds().forEach(fileId -> {
FileSimulationMapping fileSimulationMapping = new FileSimulationMapping();
fileSimulationMapping.setFileId(fileId);
fileSimulationMapping.setSimulationPoolId(saveFileSimulationMappingReq.getSimulationPoolId());
fileSimulationMapping.setSimulationPoolVersion(saveFileSimulationMappingReq.getSimulationPoolVersion());
fileSimulationMapping.setSimulationPoolTaskId(saveFileSimulationMappingReq.getSimulationPoolTaskId());
this.save(fileSimulationMapping);
});
return SdmResponse.success();
@Transactional(rollbackFor = Exception.class)
public SdmResponse batchSaveFileSimulationMapping(List<SaveFileSimulationMappingReq> saveFileSimulationMappingReqList) {
List<FileSimulationMapping> fileSimulationMappings = new ArrayList<>();
for (SaveFileSimulationMappingReq fileSimulationMappingReq : saveFileSimulationMappingReqList) {
fileSimulationMappingReq.getFileIds().forEach(fileId -> {
FileSimulationMapping fileSimulationMapping = new FileSimulationMapping();
fileSimulationMapping.setFileId(fileId);
fileSimulationMapping.setSimulationPoolId(fileSimulationMappingReq.getSimulationPoolId());
fileSimulationMapping.setSimulationPoolVersion(fileSimulationMappingReq.getSimulationPoolVersion());
fileSimulationMapping.setSimulationPoolTaskId(fileSimulationMappingReq.getSimulationPoolTaskId());
fileSimulationMappings.add(fileSimulationMapping);
});
}
this.saveBatch(fileSimulationMappings);
return SdmResponse.success();
}
@Override
@@ -67,7 +75,7 @@ public class FileSimulationMappingServiceImpl extends ServiceImpl<FileSimulation
return SdmResponse.success();
}
List<FileMetadataInfo> fileMetadataInfos = fileMetadataInfoService.lambdaQuery().in(FileMetadataInfo::getId, list.stream().map(FileSimulationMapping::getFileId).toList()).list();
if (fileMetadataInfos.isEmpty()){
if (fileMetadataInfos.isEmpty()) {
return SdmResponse.success();
}
List<FileMetadataInfoResp> fileMetadataInfoResps = new ArrayList<>();
@@ -78,7 +86,32 @@ public class FileSimulationMappingServiceImpl extends ServiceImpl<FileSimulation
});
return SdmResponse.success(fileMetadataInfoResps);
}
@Override
public SdmResponse<Map<String, List<FileMetadataInfoResp>>> batchGetFileSimulationMappingBySimulationPoolIdAndVersion(GetFileSimulationMappingReq getFileSimulationMappingReq) {
List<FileSimulationMapping> list = this.lambdaQuery().eq(FileSimulationMapping::getSimulationPoolId, getFileSimulationMappingReq.getSimulationPoolId())
.eq(FileSimulationMapping::getSimulationPoolVersion, getFileSimulationMappingReq.getSimulationPoolVersion())
.list();
if (list.isEmpty()) {
return SdmResponse.success();
}
List<FileMetadataInfo> fileMetadataInfos = fileMetadataInfoService.lambdaQuery().in(FileMetadataInfo::getId, list.stream().map(FileSimulationMapping::getFileId).toList()).list();
if (fileMetadataInfos.isEmpty()) {
return SdmResponse.success();
}
List<FileMetadataInfoResp> fileMetadataInfoResps = new ArrayList<>();
fileMetadataInfos.forEach(fileMetadataInfo -> {
FileMetadataInfoResp fileMetadataInfoResp = new FileMetadataInfoResp();
BeanUtils.copyProperties(fileMetadataInfo, fileMetadataInfoResp);
fileMetadataInfoResps.add(fileMetadataInfoResp);
});
Map<Long, FileMetadataInfoResp> fileId2Filemeta = fileMetadataInfoResps.stream().collect(Collectors.toMap(FileMetadataInfoResp::getId, file -> file));
// list 依据工况任务id simulationPoolTaskId 对fileId分组用fileId2Filemeta替换分组的内容
Map<String, List<FileMetadataInfoResp>> simulationPoolTaskId2Files = list.stream().collect(Collectors.groupingBy(FileSimulationMapping::getSimulationPoolTaskId,
Collectors.mapping(fileSimu -> fileId2Filemeta.get(fileSimu.getFileId()), Collectors.toList())));
return SdmResponse.success(simulationPoolTaskId2Files);
}
}

View File

@@ -7,7 +7,7 @@
dirId,
SUM(fileSize) AS totalSize
FROM file_storage
WHERE dirId
WHERE dirId IN
<foreach collection="directoryIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>