feat: 2.6.0
1. 优化新增失败问题
This commit is contained in:
parent
6117d7a2ee
commit
d14566a823
@ -374,8 +374,7 @@ CREATE TABLE `job_task_batch`
|
|||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `idx_job_id_task_batch_status` (`job_id`, `task_batch_status`),
|
KEY `idx_job_id_task_batch_status` (`job_id`, `task_batch_status`),
|
||||||
KEY `idx_create_dt` (`create_dt`),
|
KEY `idx_create_dt` (`create_dt`),
|
||||||
KEY `idx_namespace_id_group_name` (`namespace_id`, `group_name`),
|
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`)
|
|
||||||
) ENGINE = InnoDB
|
) ENGINE = InnoDB
|
||||||
AUTO_INCREMENT = 0
|
AUTO_INCREMENT = 0
|
||||||
DEFAULT CHARSET = utf8mb4 COMMENT ='任务批次';
|
DEFAULT CHARSET = utf8mb4 COMMENT ='任务批次';
|
||||||
|
@ -22,4 +22,9 @@ public class DecisionConfig {
|
|||||||
*/
|
*/
|
||||||
private String nodeExpression;
|
private String nodeExpression;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判定逻辑 and 或者 or
|
||||||
|
*/
|
||||||
|
private Integer logicalCondition;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -121,10 +121,11 @@ public class WorkflowHandler {
|
|||||||
* @param workflowId 工作流ID
|
* @param workflowId 工作流ID
|
||||||
* @param nodeConfig 节点配置
|
* @param nodeConfig 节点配置
|
||||||
* @param graph 图
|
* @param graph 图
|
||||||
|
* @param version 版本号
|
||||||
*/
|
*/
|
||||||
public void buildGraph(List<Long> parentIds, LinkedBlockingDeque<Long> deque,
|
public void buildGraph(List<Long> parentIds, LinkedBlockingDeque<Long> deque,
|
||||||
String groupName, Long workflowId,
|
String groupName, Long workflowId,
|
||||||
WorkflowRequestVO.NodeConfig nodeConfig, MutableGraph<Long> graph) {
|
WorkflowRequestVO.NodeConfig nodeConfig, MutableGraph<Long> graph, Integer version) {
|
||||||
|
|
||||||
if (Objects.isNull(nodeConfig)) {
|
if (Objects.isNull(nodeConfig)) {
|
||||||
return;
|
return;
|
||||||
@ -138,6 +139,7 @@ public class WorkflowHandler {
|
|||||||
workflowNode.setWorkflowId(workflowId);
|
workflowNode.setWorkflowId(workflowId);
|
||||||
workflowNode.setGroupName(groupName);
|
workflowNode.setGroupName(groupName);
|
||||||
workflowNode.setNodeType(nodeConfig.getNodeType());
|
workflowNode.setNodeType(nodeConfig.getNodeType());
|
||||||
|
workflowNode.setVersion(version);
|
||||||
if (WorkflowNodeTypeEnum.DECISION.getType() == nodeConfig.getNodeType()) {
|
if (WorkflowNodeTypeEnum.DECISION.getType() == nodeConfig.getNodeType()) {
|
||||||
workflowNode.setJobId(SystemConstants.DECISION_JOB_ID);
|
workflowNode.setJobId(SystemConstants.DECISION_JOB_ID);
|
||||||
workflowNode.setNodeInfo(JsonUtil.toJsonString(nodeInfo.getDecision()));
|
workflowNode.setNodeInfo(JsonUtil.toJsonString(nodeInfo.getDecision()));
|
||||||
@ -166,7 +168,7 @@ public class WorkflowHandler {
|
|||||||
WorkflowRequestVO.NodeConfig childNode = nodeInfo.getChildNode();
|
WorkflowRequestVO.NodeConfig childNode = nodeInfo.getChildNode();
|
||||||
if (Objects.nonNull(childNode) && !CollectionUtils.isEmpty(childNode.getConditionNodes())) {
|
if (Objects.nonNull(childNode) && !CollectionUtils.isEmpty(childNode.getConditionNodes())) {
|
||||||
buildGraph(Lists.newArrayList(workflowNode.getId()), deque, groupName, workflowId, childNode,
|
buildGraph(Lists.newArrayList(workflowNode.getId()), deque, groupName, workflowId, childNode,
|
||||||
graph);
|
graph, version);
|
||||||
} else {
|
} else {
|
||||||
// 叶子节点记录一下
|
// 叶子节点记录一下
|
||||||
deque.add(workflowNode.getId());
|
deque.add(workflowNode.getId());
|
||||||
@ -179,7 +181,7 @@ public class WorkflowHandler {
|
|||||||
// 应该是conditionNodes里面叶子节点的选择
|
// 应该是conditionNodes里面叶子节点的选择
|
||||||
List<Long> list = Lists.newArrayList();
|
List<Long> list = Lists.newArrayList();
|
||||||
deque.drainTo(list);
|
deque.drainTo(list);
|
||||||
buildGraph(list, deque, groupName, workflowId, childNode, graph);
|
buildGraph(list, deque, groupName, workflowId, childNode, graph, version);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,11 +5,9 @@ import cn.hutool.core.util.HashUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.aizuda.easy.retry.common.core.constant.SystemConstants;
|
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.StatusEnum;
|
||||||
import com.aizuda.easy.retry.common.core.enums.WorkflowNodeTypeEnum;
|
|
||||||
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
import com.aizuda.easy.retry.common.core.util.JsonUtil;
|
||||||
import com.aizuda.easy.retry.server.common.WaitStrategy;
|
import com.aizuda.easy.retry.server.common.WaitStrategy;
|
||||||
import com.aizuda.easy.retry.server.common.config.SystemProperties;
|
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.exception.EasyRetryServerException;
|
||||||
import com.aizuda.easy.retry.server.common.strategy.WaitStrategies;
|
import com.aizuda.easy.retry.server.common.strategy.WaitStrategies;
|
||||||
import com.aizuda.easy.retry.server.common.util.DateUtils;
|
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.WorkflowQueryVO;
|
||||||
import com.aizuda.easy.retry.server.web.model.request.WorkflowRequestVO;
|
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.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.WorkflowDetailResponseVO;
|
||||||
import com.aizuda.easy.retry.server.web.model.response.WorkflowResponseVO;
|
import com.aizuda.easy.retry.server.web.model.response.WorkflowResponseVO;
|
||||||
import com.aizuda.easy.retry.server.web.service.WorkflowService;
|
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.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import com.google.common.graph.GraphBuilder;
|
import com.google.common.graph.GraphBuilder;
|
||||||
import com.google.common.graph.MutableGraph;
|
import com.google.common.graph.MutableGraph;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.LinkedBlockingDeque;
|
import java.util.concurrent.LinkedBlockingDeque;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -84,8 +78,11 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
NodeConfig nodeConfig = workflowRequestVO.getNodeConfig();
|
NodeConfig nodeConfig = workflowRequestVO.getNodeConfig();
|
||||||
|
|
||||||
// 递归构建图
|
// 递归构建图
|
||||||
workflowHandler.buildGraph(Lists.newArrayList(SystemConstants.ROOT), new LinkedBlockingDeque<>(),
|
workflowHandler.buildGraph(Lists.newArrayList(SystemConstants.ROOT),
|
||||||
workflowRequestVO.getGroupName(), workflow.getId(), nodeConfig, graph);
|
new LinkedBlockingDeque<>(),
|
||||||
|
workflowRequestVO.getGroupName(),
|
||||||
|
workflow.getId(), nodeConfig, graph,
|
||||||
|
workflow.getVersion());
|
||||||
|
|
||||||
log.info("图构建完成. graph:[{}]", graph);
|
log.info("图构建完成. graph:[{}]", graph);
|
||||||
// 保存图信息
|
// 保存图信息
|
||||||
@ -154,13 +151,13 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional
|
||||||
public Boolean updateWorkflow(WorkflowRequestVO workflowRequestVO) {
|
public Boolean updateWorkflow(WorkflowRequestVO workflowRequestVO) {
|
||||||
|
|
||||||
Assert.notNull(workflowRequestVO.getId(), () -> new EasyRetryServerException("工作流ID不能为空"));
|
Assert.notNull(workflowRequestVO.getId(), () -> new EasyRetryServerException("工作流ID不能为空"));
|
||||||
|
|
||||||
Assert.isTrue(workflowMapper.selectCount(new LambdaQueryWrapper<Workflow>()
|
Workflow workflow = workflowMapper.selectById(workflowRequestVO.getId());
|
||||||
.eq(Workflow::getId, workflowRequestVO.getId())) > 0,
|
Assert.notNull(workflow, () -> new EasyRetryServerException("工作流不存在"));
|
||||||
() -> new EasyRetryServerException("工作流不存在"));
|
|
||||||
|
|
||||||
MutableGraph<Long> graph = GraphBuilder.directed().allowsSelfLoops(false).build();
|
MutableGraph<Long> graph = GraphBuilder.directed().allowsSelfLoops(false).build();
|
||||||
// 添加虚拟头节点
|
// 添加虚拟头节点
|
||||||
@ -171,14 +168,14 @@ public class WorkflowServiceImpl implements WorkflowService {
|
|||||||
|
|
||||||
// 递归构建图
|
// 递归构建图
|
||||||
workflowHandler.buildGraph(Lists.newArrayList(SystemConstants.ROOT), new LinkedBlockingDeque<>(),
|
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);
|
log.info("图构建完成. graph:[{}]", graph);
|
||||||
|
|
||||||
// 保存图信息
|
// 保存图信息
|
||||||
Workflow workflow = new Workflow();
|
workflow = new Workflow();
|
||||||
workflow.setId(workflowRequestVO.getId());
|
workflow.setId(workflowRequestVO.getId());
|
||||||
workflow.setVersion(1);
|
workflow.setVersion(workflow.getVersion() + 1);
|
||||||
workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph)));
|
workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph)));
|
||||||
Assert.isTrue(workflowMapper.updateById(workflow) > 0, () -> new EasyRetryServerException("更新失败"));
|
Assert.isTrue(workflowMapper.updateById(workflow) > 0, () -> new EasyRetryServerException("更新失败"));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user