From 771d4685919a67745e07f25128b45d7b7efde6d7 Mon Sep 17 00:00:00 2001 From: fans <1141904845@qq.com> Date: Fri, 26 Jan 2024 16:43:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=88=E6=AD=A2=E5=90=8Est?= =?UTF-8?q?atus=E4=B8=8Enode=5Fstatus=E7=8A=B6=E6=80=81=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98=20+=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=9B=A0pending=E8=80=8Cstatus=E4=B8=BA=E7=A9=BA=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../experiment/ExperimentController.java | 7 +-- .../experiment/ExperimentInsController.java | 9 ++-- .../service/ExperimentInsService.java | 9 ++-- .../platform/service/ExperimentService.java | 7 +-- .../impl/ExperimentInsServiceImpl.java | 48 ++++++++++++++----- .../service/impl/ExperimentServiceImpl.java | 7 +-- 6 files changed, 58 insertions(+), 29 deletions(-) diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentController.java index d75d39e8..0dc9a521 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/experiment/ExperimentController.java @@ -10,6 +10,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.io.IOException; /** * (Experiment)表控制层 @@ -42,7 +43,7 @@ public class ExperimentController { @GetMapping(("/status")) @ApiOperation("查询实验状态") - public AjaxResult selectStatus(@RequestBody Experiment experiment, PageRequest pageRequest){ + public AjaxResult selectStatus(@RequestBody Experiment experiment, PageRequest pageRequest) throws IOException { return AjaxResult.success(this.experimentService.selectStatus(experiment, pageRequest)); } @@ -61,7 +62,7 @@ public class ExperimentController { */ @GetMapping("{id}") @ApiOperation("通过id查询实验") - public AjaxResult queryById(@PathVariable("id") Integer id) { + public AjaxResult queryById(@PathVariable("id") Integer id) throws IOException { return AjaxResult.success(this.experimentService.queryById(id)); } @@ -85,7 +86,7 @@ public class ExperimentController { */ @PutMapping @ApiOperation("编辑实验") - public AjaxResult edit(@RequestBody Experiment experiment) { + public AjaxResult edit(@RequestBody Experiment experiment) throws IOException { return AjaxResult.success(this.experimentService.update(experiment)); } 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 7a60e512..62685eff 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 @@ -9,6 +9,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.io.IOException; import java.util.Map; /** @@ -35,7 +36,7 @@ public class ExperimentInsController { */ @GetMapping @ApiOperation("分页查询") - public AjaxResult queryByPage(ExperimentIns experimentIns, int page, int size) { + public AjaxResult queryByPage(ExperimentIns experimentIns, int page, int size) throws IOException { PageRequest pageRequest = PageRequest.of(page,size); return AjaxResult.success(this.experimentInsService.queryByPage(experimentIns, pageRequest)); } @@ -48,7 +49,7 @@ public class ExperimentInsController { */ @GetMapping("{id}") @ApiOperation("通过id查询实验实例") - public AjaxResult queryById(@PathVariable("id") Integer id) { + public AjaxResult queryById(@PathVariable("id") Integer id) throws IOException { return AjaxResult.success(this.experimentInsService.queryById(id)); } @@ -60,7 +61,7 @@ public class ExperimentInsController { */ @GetMapping("/queryByExperimentId/{Experiment_id}") @ApiOperation("通过实验id查询查询实验实例列表") - public AjaxResult queryByExperimentId(@PathVariable("Experiment_id") Integer experimentId) { + public AjaxResult queryByExperimentId(@PathVariable("Experiment_id") Integer experimentId) throws IOException { return AjaxResult.success(this.experimentInsService.getByExperimentId(experimentId)); } @@ -84,7 +85,7 @@ public class ExperimentInsController { */ @PutMapping @ApiOperation("编辑实验实例") - public AjaxResult edit(@RequestBody ExperimentIns experimentIns) { + public AjaxResult edit(@RequestBody ExperimentIns experimentIns) throws IOException { return AjaxResult.success(this.experimentInsService.update(experimentIns)); } 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 ebab5bb7..e86669bc 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 @@ -4,6 +4,7 @@ import com.ruoyi.platform.domain.ExperimentIns; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -21,7 +22,7 @@ public interface ExperimentInsService { * @param id 主键 * @return 实例对象 */ - ExperimentIns queryById(Integer id); + ExperimentIns queryById(Integer id) throws IOException; @@ -31,7 +32,7 @@ public interface ExperimentInsService { * @param experimentId 实验id,不是实例id * @return 实例列表 */ - List getByExperimentId(Integer experimentId); + List getByExperimentId(Integer experimentId) throws IOException; /** * 分页查询 @@ -40,7 +41,7 @@ public interface ExperimentInsService { * @param pageRequest 分页对象 * @return 查询结果 */ - Page queryByPage(ExperimentIns experimentIns, PageRequest pageRequest); + Page queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) throws IOException; /** * 新增数据 @@ -56,7 +57,7 @@ public interface ExperimentInsService { * @param experimentIns 实例对象 * @return 实例对象 */ - ExperimentIns update(ExperimentIns experimentIns); + ExperimentIns update(ExperimentIns experimentIns) throws IOException; diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java index c00b95a0..44af21bc 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ExperimentService.java @@ -5,6 +5,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.http.ResponseEntity; +import java.io.IOException; import java.util.List; /** @@ -21,7 +22,7 @@ public interface ExperimentService { * @param id 主键 * @return 实例对象 */ - Experiment queryById(Integer id); + Experiment queryById(Integer id) throws IOException; /** * 分页查询 @@ -46,7 +47,7 @@ public interface ExperimentService { * @param experiment 实例对象 * @return 实例对象 */ - Experiment update(Experiment experiment); + Experiment update(Experiment experiment) throws IOException; /** * 通过主键删除数据 @@ -67,7 +68,7 @@ public interface ExperimentService { * @param pageRequest 分页对象 * @return 查询结果 */ - Page selectStatus(Experiment experiment, PageRequest pageRequest); + Page selectStatus(Experiment experiment, PageRequest pageRequest) throws IOException; 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 a9ddda42..3aeb7e40 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 @@ -18,6 +18,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; @@ -55,12 +56,12 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 实例对象 */ @Override - public ExperimentIns queryById(Integer id) { + public ExperimentIns queryById(Integer id) throws IOException { ExperimentIns experimentIns = this.experimentInsDao.queryById(id); - if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns.getStatus())) { + if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { experimentIns = this.queryStatusFromArgo(experimentIns); //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(experimentIns.getStatus())) { + if (isTerminatedState(experimentIns)) { //同时更新各个节点 this.update(experimentIns); } @@ -77,17 +78,17 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 实验列表 */ @Override - public List getByExperimentId(Integer experimentId) { + public List getByExperimentId(Integer experimentId) throws IOException { List experimentInsList = experimentInsDao.getByExperimentId(experimentId); List result = new ArrayList(); if (experimentInsList!=null&&experimentInsList.size()>0) { for (ExperimentIns experimentIns : experimentInsList) { //当原本状态为null或非终止态时才调用argo接口 - if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns.getStatus())) { + if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { experimentIns = this.queryStatusFromArgo(experimentIns); //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(experimentIns.getStatus())) { + if (isTerminatedState(experimentIns)) { //同时更新各个节点 this.update(experimentIns); } @@ -108,7 +109,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 查询结果 */ @Override - public Page queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) { + public Page queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) throws IOException { long total = this.experimentInsDao.count(experimentIns); List experimentInsList = this.experimentInsDao.queryAllByLimit(experimentIns, pageRequest); if (experimentInsList!=null && experimentInsList.size()>0) { @@ -151,7 +152,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 实例对象 */ @Override - public ExperimentIns update(ExperimentIns experimentIns) { + public ExperimentIns update(ExperimentIns experimentIns) throws IOException { LoginUser loginUser = SecurityUtils.getLoginUser(); experimentIns.setUpdateBy(loginUser.getUsername()); experimentIns.setUpdateTime(new Date()); @@ -261,7 +262,12 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { String nodeStatusJson = JsonUtils.mapToJson(modifiedNodes); experimentIns.setNodesStatus(nodeStatusJson); - experimentIns.setStatus((String) status.get("phase")); + + //终止态为终止不改 + if (!StringUtils.equals(experimentIns.getStatus(),"Terminated")) { + experimentIns.setStatus(StringUtils.isNotEmpty((String) status.get("phase"))?(String) status.get("phase"):"Pending"); + } + return experimentIns; @@ -323,6 +329,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { //更新experimentIns,确保状态更新被保存到数据库 ExperimentIns ins = queryStatusFromArgo(experimentIns); ins.setStatus("Terminated"); + ins.setFinishTime(new Date()); this.experimentInsDao.update(ins); return true; } else { @@ -387,10 +394,27 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { } } - private boolean isTerminatedState(String state) { + private boolean isTerminatedState(ExperimentIns ins) throws IOException { // 定义终止态的列表,例如 "Succeeded", "Failed" 等 - List terminatedStates = Arrays.asList("Succeeded", "Failed", "Terminated"); - return terminatedStates.contains(state); + String status = ins.getStatus(); + boolean flag = true; + List terminatedStates = Arrays.asList("Succeeded", "Failed"); + flag = terminatedStates.contains(status); + if (StringUtils.equals(status, "Terminated")){ + //如果跟node_status里面不一样,就要去更新node_status的信息 + String nodesStatus = ins.getNodesStatus(); + Map nodeMap = JsonUtils.jsonToMap(nodesStatus); + String keyStartsWithWorkflow = nodeMap.keySet().stream() + .filter(key -> key.startsWith("workflow-")) + .findFirst() + .orElse(null); + Map workflowMap = (Map) nodeMap.get(keyStartsWithWorkflow); + if (workflowMap != null){ + flag = StringUtils.equals("Terminated", (String) workflowMap.get("phase")); + } + } + + return flag; } } 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 d5ac2dbb..b0a8e637 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 @@ -23,6 +23,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.io.IOException; import java.util.*; /** @@ -66,7 +67,7 @@ public class ExperimentServiceImpl implements ExperimentService { * @return 实例对象 */ @Override - public Experiment queryById(Integer id) { + public Experiment queryById(Integer id) throws IOException { List experimentInsList = this.experimentInsService.getByExperimentId(id); Experiment experiment = this.experimentDao.queryById(id); if (experiment == null) { @@ -106,7 +107,7 @@ public class ExperimentServiceImpl implements ExperimentService { * @param pageRequest 分页对象 * @return 查询结果 */ - public Page selectStatus(Experiment experiment, PageRequest pageRequest) { + public Page selectStatus(Experiment experiment, PageRequest pageRequest) throws IOException { List experimentList = this.experimentDao.queryAllByLimit(experiment, pageRequest); // 存储所有实验的ID列表 List experimentIds = new ArrayList<>(); @@ -144,7 +145,7 @@ public class ExperimentServiceImpl implements ExperimentService { * @return 实例对象 */ @Override - public Experiment update(Experiment experiment) { + public Experiment update(Experiment experiment) throws IOException { LoginUser loginUser = SecurityUtils.getLoginUser(); experiment.setUpdateBy(loginUser.getUsername()); experiment.setUpdateTime(new Date());