feat: 2.6.0

1. 优化新增失败问题
This commit is contained in:
byteblogs168 2023-12-31 23:10:00 +08:00
parent 6117d7a2ee
commit d14566a823
4 changed files with 22 additions and 19 deletions

View File

@ -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 ='任务批次';

View File

@ -22,4 +22,9 @@ public class DecisionConfig {
*/
private String nodeExpression;
/**
* 判定逻辑 and 或者 or
*/
private Integer logicalCondition;
}

View File

@ -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);
}
}

View File

@ -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("更新失败"));