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`),
|
||||
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 ='任务批次';
|
||||
|
@ -22,4 +22,9 @@ public class DecisionConfig {
|
||||
*/
|
||||
private String nodeExpression;
|
||||
|
||||
/**
|
||||
* 判定逻辑 and 或者 or
|
||||
*/
|
||||
private Integer logicalCondition;
|
||||
|
||||
}
|
||||
|
@ -121,10 +121,11 @@ public class WorkflowHandler {
|
||||
* @param workflowId 工作流ID
|
||||
* @param nodeConfig 节点配置
|
||||
* @param graph 图
|
||||
* @param version 版本号
|
||||
*/
|
||||
public void buildGraph(List<Long> parentIds, LinkedBlockingDeque<Long> deque,
|
||||
String groupName, Long workflowId,
|
||||
WorkflowRequestVO.NodeConfig nodeConfig, MutableGraph<Long> graph) {
|
||||
WorkflowRequestVO.NodeConfig nodeConfig, MutableGraph<Long> 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<Long> list = Lists.newArrayList();
|
||||
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 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<Workflow>()
|
||||
.eq(Workflow::getId, workflowRequestVO.getId())) > 0,
|
||||
() -> new EasyRetryServerException("工作流不存在"));
|
||||
Workflow workflow = workflowMapper.selectById(workflowRequestVO.getId());
|
||||
Assert.notNull(workflow, () -> new EasyRetryServerException("工作流不存在"));
|
||||
|
||||
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<>(),
|
||||
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("更新失败"));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user