From d14566a823428bd852f60dd89cf266098583e4f1 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Sun, 31 Dec 2023 23:10:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.6.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/sql/easy_retry_mysql.sql | 3 +-- .../server/common/dto/DecisionConfig.java | 5 ++++ .../web/service/handler/WorkflowHandler.java | 8 +++--- .../web/service/impl/WorkflowServiceImpl.java | 25 ++++++++----------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/doc/sql/easy_retry_mysql.sql b/doc/sql/easy_retry_mysql.sql index 27d244b65..0b4c9979e 100644 --- a/doc/sql/easy_retry_mysql.sql +++ b/doc/sql/easy_retry_mysql.sql @@ -374,8 +374,7 @@ CREATE TABLE `job_task_batch` PRIMARY KEY (`id`), KEY `idx_job_id_task_batch_status` (`job_id`, `task_batch_status`), KEY `idx_create_dt` (`create_dt`), - KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`), - UNIQUE KEY `uk_workflow_task_batch_id_workflow_node_id` (`workflow_task_batch_id`, `workflow_node_id`) + KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`) ) ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='任务批次'; diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/DecisionConfig.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/DecisionConfig.java index f60ec87f2..538a32068 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/DecisionConfig.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/dto/DecisionConfig.java @@ -22,4 +22,9 @@ public class DecisionConfig { */ private String nodeExpression; + /** + * 判定逻辑 and 或者 or + */ + private Integer logicalCondition; + } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/WorkflowHandler.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/WorkflowHandler.java index 52b627cf2..fae7836bd 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/WorkflowHandler.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/handler/WorkflowHandler.java @@ -121,10 +121,11 @@ public class WorkflowHandler { * @param workflowId 工作流ID * @param nodeConfig 节点配置 * @param graph 图 + * @param version 版本号 */ public void buildGraph(List parentIds, LinkedBlockingDeque deque, String groupName, Long workflowId, - WorkflowRequestVO.NodeConfig nodeConfig, MutableGraph graph) { + WorkflowRequestVO.NodeConfig nodeConfig, MutableGraph graph, Integer version) { if (Objects.isNull(nodeConfig)) { return; @@ -138,6 +139,7 @@ public class WorkflowHandler { workflowNode.setWorkflowId(workflowId); workflowNode.setGroupName(groupName); workflowNode.setNodeType(nodeConfig.getNodeType()); + workflowNode.setVersion(version); if (WorkflowNodeTypeEnum.DECISION.getType() == nodeConfig.getNodeType()) { workflowNode.setJobId(SystemConstants.DECISION_JOB_ID); workflowNode.setNodeInfo(JsonUtil.toJsonString(nodeInfo.getDecision())); @@ -166,7 +168,7 @@ public class WorkflowHandler { WorkflowRequestVO.NodeConfig childNode = nodeInfo.getChildNode(); if (Objects.nonNull(childNode) && !CollectionUtils.isEmpty(childNode.getConditionNodes())) { buildGraph(Lists.newArrayList(workflowNode.getId()), deque, groupName, workflowId, childNode, - graph); + graph, version); } else { // 叶子节点记录一下 deque.add(workflowNode.getId()); @@ -179,7 +181,7 @@ public class WorkflowHandler { // 应该是conditionNodes里面叶子节点的选择 List list = Lists.newArrayList(); deque.drainTo(list); - buildGraph(list, deque, groupName, workflowId, childNode, graph); + buildGraph(list, deque, groupName, workflowId, childNode, graph, version); } } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java index 8ac37f657..1bbe24d01 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowServiceImpl.java @@ -5,11 +5,9 @@ import cn.hutool.core.util.HashUtil; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.constant.SystemConstants; import com.aizuda.easy.retry.common.core.enums.StatusEnum; -import com.aizuda.easy.retry.common.core.enums.WorkflowNodeTypeEnum; import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.server.common.WaitStrategy; import com.aizuda.easy.retry.server.common.config.SystemProperties; -import com.aizuda.easy.retry.server.common.dto.JobTaskConfig; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; import com.aizuda.easy.retry.server.common.strategy.WaitStrategies; import com.aizuda.easy.retry.server.common.util.DateUtils; @@ -19,7 +17,6 @@ import com.aizuda.easy.retry.server.web.model.request.UserSessionVO; import com.aizuda.easy.retry.server.web.model.request.WorkflowQueryVO; import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO; import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO.NodeConfig; -import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO.NodeInfo; import com.aizuda.easy.retry.server.web.model.response.WorkflowDetailResponseVO; import com.aizuda.easy.retry.server.web.model.response.WorkflowResponseVO; import com.aizuda.easy.retry.server.web.service.WorkflowService; @@ -33,16 +30,13 @@ import com.aizuda.easy.retry.template.datasource.persistence.po.WorkflowNode; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import com.google.common.graph.GraphBuilder; import com.google.common.graph.MutableGraph; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import java.io.IOException; import java.util.*; import java.util.concurrent.LinkedBlockingDeque; import java.util.stream.Collectors; @@ -84,8 +78,11 @@ public class WorkflowServiceImpl implements WorkflowService { NodeConfig nodeConfig = workflowRequestVO.getNodeConfig(); // 递归构建图 - workflowHandler.buildGraph(Lists.newArrayList(SystemConstants.ROOT), new LinkedBlockingDeque<>(), - workflowRequestVO.getGroupName(), workflow.getId(), nodeConfig, graph); + workflowHandler.buildGraph(Lists.newArrayList(SystemConstants.ROOT), + new LinkedBlockingDeque<>(), + workflowRequestVO.getGroupName(), + workflow.getId(), nodeConfig, graph, + workflow.getVersion()); log.info("图构建完成. graph:[{}]", graph); // 保存图信息 @@ -154,13 +151,13 @@ public class WorkflowServiceImpl implements WorkflowService { } @Override + @Transactional public Boolean updateWorkflow(WorkflowRequestVO workflowRequestVO) { Assert.notNull(workflowRequestVO.getId(), () -> new EasyRetryServerException("工作流ID不能为空")); - Assert.isTrue(workflowMapper.selectCount(new LambdaQueryWrapper() - .eq(Workflow::getId, workflowRequestVO.getId())) > 0, - () -> new EasyRetryServerException("工作流不存在")); + Workflow workflow = workflowMapper.selectById(workflowRequestVO.getId()); + Assert.notNull(workflow, () -> new EasyRetryServerException("工作流不存在")); MutableGraph graph = GraphBuilder.directed().allowsSelfLoops(false).build(); // 添加虚拟头节点 @@ -171,14 +168,14 @@ public class WorkflowServiceImpl implements WorkflowService { // 递归构建图 workflowHandler.buildGraph(Lists.newArrayList(SystemConstants.ROOT), new LinkedBlockingDeque<>(), - workflowRequestVO.getGroupName(), workflowRequestVO.getId(), nodeConfig, graph); + workflowRequestVO.getGroupName(), workflowRequestVO.getId(), nodeConfig, graph, workflow.getVersion() + 1); log.info("图构建完成. graph:[{}]", graph); // 保存图信息 - Workflow workflow = new Workflow(); + workflow = new Workflow(); workflow.setId(workflowRequestVO.getId()); - workflow.setVersion(1); + workflow.setVersion(workflow.getVersion() + 1); workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph))); Assert.isTrue(workflowMapper.updateById(workflow) > 0, () -> new EasyRetryServerException("更新失败"));