From d76a162e60a84240893f4414727f4c5068dc3e42 Mon Sep 17 00:00:00 2001 From: ulleo Date: Wed, 12 Mar 2025 10:42:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(X-Pack):=20[=E6=95=B0=E6=8D=AE=E5=A1=AB?= =?UTF-8?q?=E6=8A=A5]=E6=96=B0=E5=BB=BA=E8=A1=A8=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=BB=91=E5=AE=9A=E5=B7=B2=E6=9C=89=E8=A1=A8=20#12788?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化获取数据源列表接口 --- .../datasource/server/DatasourceServer.java | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index e405075380..3966fb1aec 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -65,7 +65,6 @@ import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.lang.reflect.Method; import java.util.*; -import java.util.concurrent.*; import java.util.stream.Collectors; import static io.dataease.datasource.server.DatasourceTaskServer.ScheduleType.MANUAL; @@ -583,39 +582,45 @@ public class DatasourceServer implements DatasourceApi { } List dsList = datasourceMapper.selectList(queryWrapper); - try (ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor()) { - List> tasks = new ArrayList<>(); - // 创建多个任务 - for (CoreDatasource datasource : dsList) { - tasks.add(() -> { - try { - return convertCoreDatasource(datasource.getId(), false, datasource); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - }); - } + for (CoreDatasource datasource : dsList) { + DatasourceDTO datasourceDTO = new DatasourceDTO(); + BeanUtils.copyBean(datasourceDTO, datasource); - // 提交所有任务并等待结果 - List> futures = executor.invokeAll(tasks); - for (Future future : futures) { - DatasourceDTO datasourceDTO = future.get(); - if (datasourceDTO != null) { - list.add(datasourceDTO); + if (datasourceDTO.getType().contains(DatasourceConfiguration.DatasourceType.API.toString())) { + List apiDefinitionList = JsonUtil.parseList(datasourceDTO.getConfiguration(), listTypeReference); + int success = 0; + for (ApiDefinition apiDefinition : apiDefinitionList) { + String status = null; + if (StringUtils.isNotEmpty(datasourceDTO.getStatus())) { + JsonNode jsonNode = null; + try { + jsonNode = objectMapper.readTree(datasourceDTO.getStatus()); + for (JsonNode node : jsonNode) { + if (node.get("name").asText().equals(apiDefinition.getName())) { + status = node.get("status").asText(); + } + } + apiDefinition.setStatus(status); + } catch (Exception ignore) { + } + } + if (StringUtils.isNotEmpty(status) && status.equalsIgnoreCase("Success")) { + success++; + } + } + if (success == apiDefinitionList.size()) { + datasourceDTO.setStatus("Success"); + } else { + if (success > 0 && success < apiDefinitionList.size()) { + datasourceDTO.setStatus("Warning"); + } else { + datasourceDTO.setStatus("Error"); + } } } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - /*for (CoreDatasource datasource : dsList) { - try { - list.add(convertCoreDatasource(datasource.getId(), false, datasource)); - } catch (Exception e) { - e.printStackTrace(); - } - }*/ + list.add(datasourceDTO); + } return list; }