diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 64269a4f..33652a75 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -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 list) { - if (ObjectUtils.isNotEmpty(list)) { - List fileIds = list.stream() - .map(FileMetadataInfo::getId) - .distinct() - .toList(); + if (ObjectUtils.isEmpty(list)) { + return; + } - List result = new ArrayList<>(); - List fileSimulationMappingByFileId = fileSimulationMappingService.getFileSimulationMappingByFileId(fileIds); - if(CollectionUtils.isEmpty(fileSimulationMappingByFileId)){ - return; + List pendingQueryList = new ArrayList<>(); + for (FileMetadataInfo fileMetadataInfo : list) { + if (!trySetPoolInfosFromTemp(fileMetadataInfo)) { + pendingQueryList.add(fileMetadataInfo); } - log.info("文件绑定知识库的查询结果 :{}",fileSimulationMappingByFileId); + } - fileSimulationMappingByFileId.forEach(fileSimulationMappingResp -> { - SdmResponse> taskPoolTaskMap = isSimuluationTaskPoolFeignClient.getTaskPoolTaskMap(fileSimulationMappingResp.getSimulationPoolId()); - if(taskPoolTaskMap.isSuccess() && !Objects.isNull(taskPoolTaskMap.getData())) { - Map 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 simulationPoolInfoList = fileMetadataInfo.getSimulationPoolInfoList(); + if (CollectionUtils.isEmpty(simulationPoolInfoList)) { + return false; + } + + List poolInfos = new ArrayList<>(); + for (SimulationPoolInfo simulationPoolInfo : simulationPoolInfoList) { + Integer poolId = simulationPoolInfo.getSimulationPoolId(); + SdmResponse> taskPoolTaskMap = isSimuluationTaskPoolFeignClient.getTaskPoolTaskMap(poolId); + Map data = taskPoolTaskMap.isSuccess() ? taskPoolTaskMap.getData() : null; + + List taskIds = Optional.ofNullable(simulationPoolInfo.getSimulationPoolTaskIds()).orElseGet(ArrayList::new); + List 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 fileMetadataInfoList) { + List fileIds = fileMetadataInfoList.stream() + .map(FileMetadataInfo::getId) + .distinct() + .toList(); + + List result = new ArrayList<>(); + List fileSimulationMappingByFileId = fileSimulationMappingService.getFileSimulationMappingByFileId(fileIds); + if (CollectionUtils.isEmpty(fileSimulationMappingByFileId)) { + return; + } + log.info("文件绑定知识库的查询结果 :{}", fileSimulationMappingByFileId); + + fileSimulationMappingByFileId.forEach(fileSimulationMappingResp -> { + SdmResponse> taskPoolTaskMap = isSimuluationTaskPoolFeignClient.getTaskPoolTaskMap(fileSimulationMappingResp.getSimulationPoolId()); + if (taskPoolTaskMap.isSuccess() && !Objects.isNull(taskPoolTaskMap.getData())) { + Map 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>> fileTaskPoolMap = result.stream() - .collect(Collectors.groupingBy( - TaskBaseInfo::getFileId, - Collectors.groupingBy(TaskBaseInfo::getPoolId) - )); + // 按 fileId 和 poolId 双重分组 + Map>> fileTaskPoolMap = result.stream() + .collect(Collectors.groupingBy( + TaskBaseInfo::getFileId, + Collectors.groupingBy(TaskBaseInfo::getPoolId) + )); - // 按 fileId 和 poolId 分组收集 simulationPoolTaskId - Map>> filePoolTaskIdsMap = fileSimulationMappingByFileId.stream() - .collect(Collectors.groupingBy( - FileSimulationMappingResp::getFileId, - Collectors.groupingBy( - FileSimulationMappingResp::getSimulationPoolId, - Collectors.mapping(FileSimulationMappingResp::getSimulationPoolTaskId, Collectors.toList()) - ) - )); + // 按 fileId 和 poolId 分组收集 simulationPoolTaskId + Map>> 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> poolMap = fileTaskPoolMap.get(fileId); - Map> poolTaskIdsMap = filePoolTaskIdsMap.getOrDefault(fileId, new HashMap<>()); + // 为每个文件创建 PoolInfo 列表 + for (FileMetadataInfo fileMetadataInfo : fileMetadataInfoList) { + Long fileId = fileMetadataInfo.getId(); + if (fileTaskPoolMap.containsKey(fileId)) { + Map> poolMap = fileTaskPoolMap.get(fileId); + Map> poolTaskIdsMap = filePoolTaskIdsMap.getOrDefault(fileId, new HashMap<>()); - List poolInfos = new ArrayList<>(); - for (Map.Entry> poolEntry : poolMap.entrySet()) { - Integer poolId = poolEntry.getKey(); - List taskList = poolEntry.getValue(); - List taskIds = poolTaskIdsMap.getOrDefault(poolId, new ArrayList<>()); + List poolInfos = new ArrayList<>(); + for (Map.Entry> poolEntry : poolMap.entrySet()) { + Integer poolId = poolEntry.getKey(); + List taskList = poolEntry.getValue(); + List 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); } } }