可正常启动,工作流可以正常运行,增加了其他节点,但是还没运行过,编译无错。
This commit is contained in:
parent
7991bde3ae
commit
79edbbcb82
@ -36,7 +36,7 @@ public class WorkflowDefinitionParser {
|
||||
try {
|
||||
log.debug("Parsing node config: {}", nodeConfig);
|
||||
JsonNode rootNode = objectMapper.readTree(nodeConfig);
|
||||
JsonNode nodesNode = rootNode.get("nodes");
|
||||
JsonNode nodesNode = rootNode.get("nodeConfig");
|
||||
if (nodesNode == null || !nodesNode.isArray()) {
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_NODE_CONFIG_INVALID);
|
||||
}
|
||||
@ -63,18 +63,21 @@ public class WorkflowDefinitionParser {
|
||||
public List<TransitionConfig> parseTransitionConfig(String transitionConfig) {
|
||||
try {
|
||||
log.debug("Parsing transition config: {}", transitionConfig);
|
||||
List<TransitionConfig> transitions = objectMapper.readValue(
|
||||
transitionConfig,
|
||||
new TypeReference<List<TransitionConfig>>() {}
|
||||
);
|
||||
|
||||
transitions.forEach(transition ->
|
||||
JsonNode rootNode = objectMapper.readTree(transitionConfig);
|
||||
JsonNode transitionsNode = rootNode.get("transitionConfig");
|
||||
if (transitionsNode == null || !transitionsNode.isArray()) {
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_CONFIG_INVALID);
|
||||
}
|
||||
|
||||
List<TransitionConfig> transitions = new ArrayList<>();
|
||||
for (JsonNode node : transitionsNode) {
|
||||
TransitionConfig config = objectMapper.treeToValue(node, TransitionConfig.class);
|
||||
transitions.add(config);
|
||||
log.debug("Parsed transition: {} -> {}, priority={}",
|
||||
transition.getSourceNodeId(),
|
||||
transition.getTargetNodeId(),
|
||||
transition.getPriority())
|
||||
);
|
||||
|
||||
config.getSourceNodeId(),
|
||||
config.getTargetNodeId(),
|
||||
config.getPriority());
|
||||
}
|
||||
return transitions;
|
||||
} catch (JsonProcessingException e) {
|
||||
log.error("Failed to parse transition config: {}", e.getMessage(), e);
|
||||
@ -93,18 +96,18 @@ public class WorkflowDefinitionParser {
|
||||
boolean hasStart = false;
|
||||
boolean hasEnd = false;
|
||||
for (NodeConfig node : nodes) {
|
||||
switch (node.getType()) {
|
||||
case START -> hasStart = true;
|
||||
case END -> hasEnd = true;
|
||||
if (node.getType() == NodeTypeEnum.START) {
|
||||
hasStart = true;
|
||||
} else if (node.getType() == NodeTypeEnum.END) {
|
||||
hasEnd = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasStart || !hasEnd) {
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_CONFIG_INVALID,
|
||||
"Workflow must have both START and END nodes");
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_CONFIG_INVALID, "工作流必须包含开始节点和结束节点");
|
||||
}
|
||||
|
||||
// 2. 检查流转配置中的节点ID是否都存在
|
||||
// 2. 检查流转配置的完整性
|
||||
for (TransitionConfig transition : transitions) {
|
||||
boolean sourceExists = false;
|
||||
boolean targetExists = false;
|
||||
@ -119,36 +122,11 @@ public class WorkflowDefinitionParser {
|
||||
}
|
||||
|
||||
if (!sourceExists || !targetExists) {
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_CONFIG_INVALID,
|
||||
String.format("Invalid node reference in transition: %s -> %s",
|
||||
transition.getSourceNodeId(), transition.getTargetNodeId()));
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_CONFIG_INVALID,
|
||||
String.format("流转配置中的节点不存在: %s -> %s",
|
||||
transition.getSourceNodeId(),
|
||||
transition.getTargetNodeId()));
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 检查是否存在孤立节点(没有入边或出边的非开始/结束节点)
|
||||
for (NodeConfig node : nodes) {
|
||||
if (node.getType() == NodeTypeEnum.START || node.getType() == NodeTypeEnum.END) {
|
||||
continue;
|
||||
}
|
||||
|
||||
boolean hasIncoming = false;
|
||||
boolean hasOutgoing = false;
|
||||
|
||||
for (TransitionConfig transition : transitions) {
|
||||
if (transition.getTargetNodeId().equals(node.getNodeId())) {
|
||||
hasIncoming = true;
|
||||
}
|
||||
if (transition.getSourceNodeId().equals(node.getNodeId())) {
|
||||
hasOutgoing = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasIncoming || !hasOutgoing) {
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_CONFIG_INVALID,
|
||||
String.format("Isolated node found: %s", node.getNodeId()));
|
||||
}
|
||||
}
|
||||
|
||||
log.info("Workflow configuration validation passed");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user