Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-03-11 16:29:53 +08:00

View File

@@ -66,6 +66,8 @@ import org.apache.commons.lang3.ObjectUtils;
import org.assertj.core.util.DateUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
@@ -3666,78 +3668,136 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
private void setSimulationPoolAndTaskInfo(List<FileMetadataInfo> list) {
if (ObjectUtils.isNotEmpty(list)) {
List<Long> fileIds = list.stream()
.map(FileMetadataInfo::getId)
.distinct()
.toList();
if (ObjectUtils.isEmpty(list)) {
return;
}
List<TaskBaseInfo> result = new ArrayList<>();
List<FileSimulationMappingResp> fileSimulationMappingByFileId = fileSimulationMappingService.getFileSimulationMappingByFileId(fileIds);
if(CollectionUtils.isEmpty(fileSimulationMappingByFileId)){
return;
List<FileMetadataInfo> pendingQueryList = new ArrayList<>();
for (FileMetadataInfo fileMetadataInfo : list) {
if (!trySetPoolInfosFromTemp(fileMetadataInfo)) {
pendingQueryList.add(fileMetadataInfo);
}
log.info("文件绑定知识库的查询结果 :{}",fileSimulationMappingByFileId);
}
fileSimulationMappingByFileId.forEach(fileSimulationMappingResp -> {
SdmResponse<Map<String, TaskBaseInfo>> taskPoolTaskMap = isSimuluationTaskPoolFeignClient.getTaskPoolTaskMap(fileSimulationMappingResp.getSimulationPoolId());
if(taskPoolTaskMap.isSuccess() && !Objects.isNull(taskPoolTaskMap.getData())) {
Map<String, TaskBaseInfo> data = taskPoolTaskMap.getData();
TaskBaseInfo taskBaseInfo = data.getOrDefault(fileSimulationMappingResp.getSimulationPoolTaskId(), null);
if(ObjectUtils.isNotEmpty(taskBaseInfo)) {
taskBaseInfo.setPoolId(fileSimulationMappingResp.getSimulationPoolId());
taskBaseInfo.setFileId(fileSimulationMappingResp.getFileId());
result.add(taskBaseInfo);
if (CollectionUtils.isNotEmpty(pendingQueryList)) {
fillPoolInfosFromMappings(pendingQueryList);
}
}
private boolean trySetPoolInfosFromTemp(FileMetadataInfo fileMetadataInfo) {
List<SimulationPoolInfo> simulationPoolInfoList = fileMetadataInfo.getSimulationPoolInfoList();
if (CollectionUtils.isEmpty(simulationPoolInfoList)) {
return false;
}
List<PoolInfo> poolInfos = new ArrayList<>();
for (SimulationPoolInfo simulationPoolInfo : simulationPoolInfoList) {
Integer poolId = simulationPoolInfo.getSimulationPoolId();
SdmResponse<Map<String, TaskBaseInfo>> taskPoolTaskMap = isSimuluationTaskPoolFeignClient.getTaskPoolTaskMap(poolId);
Map<String, TaskBaseInfo> data = taskPoolTaskMap.isSuccess() ? taskPoolTaskMap.getData() : null;
List<String> taskIds = Optional.ofNullable(simulationPoolInfo.getSimulationPoolTaskIds()).orElseGet(ArrayList::new);
List<TaskBaseInfo> taskList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(taskIds) && ObjectUtils.isNotEmpty(data)) {
taskIds.forEach(taskId -> {
TaskBaseInfo taskBaseInfo = data.getOrDefault(taskId, null);
if (ObjectUtils.isNotEmpty(taskBaseInfo)) {
taskBaseInfo.setPoolId(poolId);
taskBaseInfo.setFileId(fileMetadataInfo.getId());
taskList.add(taskBaseInfo);
}
});
}
PoolInfo poolInfo = new PoolInfo();
poolInfo.setSimulationPoolId(poolId);
poolInfo.setSimulationPoolName("");
poolInfo.setSimulationPoolVersion(simulationPoolInfo.getSimulationPoolVersion());
poolInfo.setSimulationPoolTaskIds(taskIds);
poolInfo.setTaskBaseInfoList(taskList);
if (CollectionUtils.isNotEmpty(taskList)) {
poolInfo.setSimulationPoolName(taskList.get(0).getPoolName());
poolInfo.setSimulationPoolVersion(taskList.get(0).getVersion());
}
poolInfos.add(poolInfo);
}
fileMetadataInfo.setPoolInfos(poolInfos);
return true;
}
private void fillPoolInfosFromMappings(List<FileMetadataInfo> fileMetadataInfoList) {
List<Long> fileIds = fileMetadataInfoList.stream()
.map(FileMetadataInfo::getId)
.distinct()
.toList();
List<TaskBaseInfo> result = new ArrayList<>();
List<FileSimulationMappingResp> fileSimulationMappingByFileId = fileSimulationMappingService.getFileSimulationMappingByFileId(fileIds);
if (CollectionUtils.isEmpty(fileSimulationMappingByFileId)) {
return;
}
log.info("文件绑定知识库的查询结果 :{}", fileSimulationMappingByFileId);
fileSimulationMappingByFileId.forEach(fileSimulationMappingResp -> {
SdmResponse<Map<String, TaskBaseInfo>> taskPoolTaskMap = isSimuluationTaskPoolFeignClient.getTaskPoolTaskMap(fileSimulationMappingResp.getSimulationPoolId());
if (taskPoolTaskMap.isSuccess() && !Objects.isNull(taskPoolTaskMap.getData())) {
Map<String, TaskBaseInfo> data = taskPoolTaskMap.getData();
TaskBaseInfo taskBaseInfo = data.getOrDefault(fileSimulationMappingResp.getSimulationPoolTaskId(), null);
if (ObjectUtils.isNotEmpty(taskBaseInfo)) {
taskBaseInfo.setPoolId(fileSimulationMappingResp.getSimulationPoolId());
taskBaseInfo.setFileId(fileSimulationMappingResp.getFileId());
result.add(taskBaseInfo);
}
});
}
});
// 按 fileId 和 poolId 双重分组
Map<Long, Map<Integer, List<TaskBaseInfo>>> fileTaskPoolMap = result.stream()
.collect(Collectors.groupingBy(
TaskBaseInfo::getFileId,
Collectors.groupingBy(TaskBaseInfo::getPoolId)
));
// 按 fileId 和 poolId 双重分组
Map<Long, Map<Integer, List<TaskBaseInfo>>> fileTaskPoolMap = result.stream()
.collect(Collectors.groupingBy(
TaskBaseInfo::getFileId,
Collectors.groupingBy(TaskBaseInfo::getPoolId)
));
// 按 fileId 和 poolId 分组收集 simulationPoolTaskId
Map<Long, Map<Integer, List<String>>> filePoolTaskIdsMap = fileSimulationMappingByFileId.stream()
.collect(Collectors.groupingBy(
FileSimulationMappingResp::getFileId,
Collectors.groupingBy(
FileSimulationMappingResp::getSimulationPoolId,
Collectors.mapping(FileSimulationMappingResp::getSimulationPoolTaskId, Collectors.toList())
)
));
// 按 fileId 和 poolId 分组收集 simulationPoolTaskId
Map<Long, Map<Integer, List<String>>> filePoolTaskIdsMap = fileSimulationMappingByFileId.stream()
.collect(Collectors.groupingBy(
FileSimulationMappingResp::getFileId,
Collectors.groupingBy(
FileSimulationMappingResp::getSimulationPoolId,
Collectors.mapping(FileSimulationMappingResp::getSimulationPoolTaskId, Collectors.toList())
)
));
// 为每个文件创建 PoolInfo 列表
for (FileMetadataInfo fileMetadataInfo : list) {
Long fileId = fileMetadataInfo.getId();
if (fileTaskPoolMap.containsKey(fileId)) {
Map<Integer, List<TaskBaseInfo>> poolMap = fileTaskPoolMap.get(fileId);
Map<Integer, List<String>> poolTaskIdsMap = filePoolTaskIdsMap.getOrDefault(fileId, new HashMap<>());
// 为每个文件创建 PoolInfo 列表
for (FileMetadataInfo fileMetadataInfo : fileMetadataInfoList) {
Long fileId = fileMetadataInfo.getId();
if (fileTaskPoolMap.containsKey(fileId)) {
Map<Integer, List<TaskBaseInfo>> poolMap = fileTaskPoolMap.get(fileId);
Map<Integer, List<String>> poolTaskIdsMap = filePoolTaskIdsMap.getOrDefault(fileId, new HashMap<>());
List<PoolInfo> poolInfos = new ArrayList<>();
for (Map.Entry<Integer, List<TaskBaseInfo>> poolEntry : poolMap.entrySet()) {
Integer poolId = poolEntry.getKey();
List<TaskBaseInfo> taskList = poolEntry.getValue();
List<String> taskIds = poolTaskIdsMap.getOrDefault(poolId, new ArrayList<>());
List<PoolInfo> poolInfos = new ArrayList<>();
for (Map.Entry<Integer, List<TaskBaseInfo>> poolEntry : poolMap.entrySet()) {
Integer poolId = poolEntry.getKey();
List<TaskBaseInfo> taskList = poolEntry.getValue();
List<String> taskIds = poolTaskIdsMap.getOrDefault(poolId, new ArrayList<>());
PoolInfo poolInfo = new PoolInfo();
poolInfo.setSimulationPoolId(poolId);
poolInfo.setSimulationPoolName("");
poolInfo.setSimulationPoolVersion("");
poolInfo.setSimulationPoolTaskIds(taskIds);
poolInfo.setTaskBaseInfoList(taskList);
if(CollectionUtils.isNotEmpty(taskList)) {
poolInfo.setSimulationPoolName(taskList.get(0).getPoolName());
poolInfo.setSimulationPoolVersion(taskList.get(0).getVersion());
}
poolInfos.add(poolInfo);
PoolInfo poolInfo = new PoolInfo();
poolInfo.setSimulationPoolId(poolId);
poolInfo.setSimulationPoolName("");
poolInfo.setSimulationPoolVersion("");
poolInfo.setSimulationPoolTaskIds(taskIds);
poolInfo.setTaskBaseInfoList(taskList);
if (CollectionUtils.isNotEmpty(taskList)) {
poolInfo.setSimulationPoolName(taskList.get(0).getPoolName());
poolInfo.setSimulationPoolVersion(taskList.get(0).getVersion());
}
fileMetadataInfo.setPoolInfos(poolInfos);
poolInfos.add(poolInfo);
}
fileMetadataInfo.setPoolInfos(poolInfos);
}
}
}