From 4f3dda3a64d1eab6ee77f7df1972c8255440b7d5 Mon Sep 17 00:00:00 2001 From: fans <1141904845@qq.com> Date: Fri, 19 Jan 2024 15:49:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../experiment/ExperimentInsController.java | 12 ++++- .../service/ExperimentInsService.java | 3 +- .../impl/ExperimentInsServiceImpl.java | 49 +++++++++---------- .../service/impl/ExperimentServiceImpl.java | 8 +-- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentInsController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentInsController.java index e3df2ee1..61d42f59 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentInsController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentInsController.java @@ -51,7 +51,17 @@ public class ExperimentInsController { return AjaxResult.success(this.experimentInsService.queryById(id)); } - + /** + * 通过实验ID查询单条数据 + * + * @param experimentId 主键 + * @return 单条数据 + */ + @GetMapping("{Experiment_id}") + @ApiOperation("通过实验id查询查询实验实例列表") + public AjaxResult queryByExperimentId(@PathVariable("Experiment_id") Integer experimentId) { + return AjaxResult.success(this.experimentInsService.getByExperimentId(experimentId)); + } /** * 新增数据 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java index e86fa575..00e15147 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentInsService.java @@ -72,7 +72,7 @@ public interface ExperimentInsService { List queryByExperimentId(Integer id); - String queryStatusFromArgo(String namespace, String name, Integer id); + ExperimentIns queryStatusFromArgo(ExperimentIns ins); boolean terminateExperimentIns(Integer id); @@ -83,4 +83,5 @@ public interface ExperimentInsService { * @return 运行日志 */ String showExperimentInsLog(Integer id); + } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java index 43f6fd1c..494e3f52 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java @@ -34,12 +34,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { @Resource private ExperimentDao experimentDao; @Resource - private WorkflowService - - - workflowService; - - + private WorkflowService workflowService; @Value("${argo.url}") private String argoUrl; @Value("${argo.convert}") @@ -67,11 +62,10 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { // 检查是否需要调用接口查询状态:当原本状态为null或非终止态时调用argo接口 if (StringUtils.isEmpty(currentStatus) || !isTerminatedState(currentStatus)) { - String newStatus = this.queryStatusFromArgo(experimentIns.getArgoInsNs(), experimentIns.getArgoInsName(), id ); + experimentIns = this.queryStatusFromArgo(experimentIns); // 如果新状态不是null,并且与旧状态不同,则更新状态 - if(!StringUtils.isEmpty(newStatus) && !StringUtils.equals(newStatus, currentStatus)){ - experimentIns.setStatus(newStatus); + if(!StringUtils.isEmpty(experimentIns.getStatus()) && !StringUtils.equals(experimentIns.getStatus(), currentStatus)){ this.update(experimentIns); } @@ -90,14 +84,17 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { @Override public List getByExperimentId(Integer experimentId) { List experimentInsList = experimentInsDao.getByExperimentId(experimentId); - for (ExperimentIns experimentIns: experimentInsList) { - //当原本状态为null或非终止态时才调用argo接口 - if ( experimentIns!=null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns.getStatus())) { - String newStatus = this.queryStatusFromArgo(experimentIns.getArgoInsNs(), experimentIns.getArgoInsName(),experimentIns.getId()); - experimentIns.setStatus(newStatus); - //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(newStatus)) { - this.update(experimentIns); + if (experimentInsList!=null&&experimentInsList.size()>0) { + for (ExperimentIns experimentIns : experimentInsList) { + //当原本状态为null或非终止态时才调用argo接口 + if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns.getStatus())) { + experimentIns = this.queryStatusFromArgo(experimentIns); + //只有当新状态是终止态时才更新数据库 + if (isTerminatedState(experimentIns.getStatus())) { + //同时更新各个节点 + + this.update(experimentIns); + } } } } @@ -121,9 +118,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { for (ExperimentIns ins : experimentInsList) { //如果实验实例不为空或者 if (ins != null && StringUtils.isEmpty(ins.getStatus())) { - Integer experimentInsId = ins.getId(); - String status = this.queryStatusFromArgo(ins.getArgoInsNs(), ins.getArgoInsName(), experimentInsId); - ins.setStatus(status); + ins = this.queryStatusFromArgo(ins); this.update(ins); } } @@ -183,7 +178,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { } if (StringUtils.isEmpty(experimentIns.getStatus())){ - experimentIns.setStatus(queryStatusFromArgo(experimentIns.getArgoInsNs(), experimentIns.getArgoInsName(), id)); + experimentIns = queryStatusFromArgo(experimentIns); } if (StringUtils.equals(experimentIns.getStatus(),"Running")){ return "实验实例正在运行,不可删除"; @@ -214,7 +209,11 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { } @Override - public String queryStatusFromArgo(String namespace, String name, Integer id) { + public ExperimentIns queryStatusFromArgo(ExperimentIns ins) { + + String namespace = ins.getArgoInsNs(); + String name = ins.getArgoInsName(); + Integer id = ins.getId(); ExperimentIns experimentIns = this.experimentInsDao.queryById(id); // 创建请求数据map Map requestData = new HashMap<>(); @@ -273,9 +272,9 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { String nodeStatusJson = JsonUtils.mapToJson(modifiedNodes); experimentIns.setNodesStatus(nodeStatusJson); - this.experimentInsDao.update(experimentIns); + experimentIns.setStatus((String) status.get("phase")); - return (String) status.get("phase"); + return experimentIns; } catch (Exception e) { throw new RuntimeException("查询状态失败: " + e.getMessage(), e); @@ -303,7 +302,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { String namespace = experimentIns.getArgoInsNs(); // 获取当前状态,如果为空,则从Argo查询 if (StringUtils.isEmpty(currentStatus)) { - currentStatus = queryStatusFromArgo(namespace, name, id ); + currentStatus = queryStatusFromArgo(experimentIns).getStatus(); } // 只有状态是"Running"时才能终止实例 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java index a8699a9b..c410b6a5 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java @@ -91,10 +91,10 @@ public class ExperimentServiceImpl implements ExperimentService { long total = this.experimentDao.count(experiment); // 存储所有实验的ID列表 //对于每一个从Experiment表中查询出来的id,可能有多个实例,每个实例的实验id是不同的 - for (Experiment exp: experimentList) { - List experimentInsList = this.experimentInsService.getByExperimentId(exp.getId()); - exp.setExperimentInsList(experimentInsList); - } +// for (Experiment exp: experimentList) { +// List experimentInsList = this.experimentInsService.getByExperimentId(exp.getId()); +// exp.setExperimentInsList(experimentInsList); +// } return new PageImpl<>(experimentList,pageRequest,total); }