反序列化问题。

This commit is contained in:
dengqichen 2024-12-18 18:25:54 +08:00
parent dd07b181ce
commit 3c6bf11cad
31 changed files with 235 additions and 127 deletions

View File

@ -2,11 +2,10 @@ package com.qqchen.deploy.backend.workflow.dto;
import com.fasterxml.jackson.databind.JsonNode;
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum;
import jakarta.persistence.Column;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -0,0 +1,18 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.BaseEventNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.BaseNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.EndNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.StartNodeLocalVariables;
import lombok.Data;
public class NodeDefinitionContainer extends BaseEventNodeLocalVariables {
private BaseNodeLocalVariables
}

View File

@ -0,0 +1,11 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import lombok.Data;
/**
* 事件节点基础配置
*/
@Data
public abstract class BaseEventNodeLocalVariables extends BaseNodeLocalVariables {
}

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import lombok.Data;
@ -7,7 +7,7 @@ import lombok.Data;
* 事件节点基础配置
*/
@Data
public class BaseNodeConfig {
public class BaseNodeLocalVariables {
@SchemaProperty(
title = "节点Code",

View File

@ -1,16 +1,13 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 基础节点配置
*/
@Data
public class BaseTaskNodeConfig extends BaseNodeConfig {
public class BaseTaskNodeLocalVariables extends BaseNodeLocalVariables {
@SchemaProperty(
title = "执行委派者",
@ -113,15 +110,6 @@ public class BaseTaskNodeConfig extends BaseNodeConfig {
// private Boolean exclusive;
//
// /**
// * 自定义属性
// */
// @SchemaProperty(
// title = "自定义属性",
// description = "节点的自定义属性配置"
// )
// private Map<String, Object> customProperties;
//
// /**
// * 文档说明
// */
// @SchemaProperty(

View File

@ -0,0 +1,13 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 结束节点配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class EndNodeLocalVariables extends BaseEventNodeLocalVariables {
}

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import lombok.Data;
@ -11,7 +11,7 @@ import java.util.Map;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class GitCloneConfig extends BaseTaskNodeConfig {
public class GitCloneLocalVariables extends BaseTaskNodeLocalVariables {
/**
* 仓库URL
*/

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import lombok.Data;
@ -12,7 +12,7 @@ import java.util.Map;
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ScriptNodeConfig extends BaseTaskNodeConfig {
public class ScriptNodeLocalVariables extends BaseTaskNodeLocalVariables {
/**

View File

@ -0,0 +1,13 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 开始节点配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class StartNodeLocalVariables extends BaseEventNodeLocalVariables {
}

View File

@ -0,0 +1,46 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.demo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 基于条件的网关配置基类
*/
@Data
@EqualsAndHashCode(callSuper = true)
public abstract class ConditionalGatewayConfig extends GatewayConfig {
/**
* 条件分支列表
*/
private List<ConditionalBranch> branches;
/**
* 默认分支节点ID
*/
private String defaultNodeId;
@Data
public static class ConditionalBranch {
/**
* 分支名称
*/
private String name;
/**
* 条件表达式
*/
private String condition;
/**
* 目标节点ID
*/
private String targetNodeId;
/**
* 分支描述
*/
private String description;
}
}

View File

@ -0,0 +1,25 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.demo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.util.Collections;
import java.util.List;
/**
* 排他网关配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ExclusiveGatewayConfig extends ConditionalGatewayConfig {
private final ExpressionParser expressionParser = new SpelExpressionParser();
@Override
public List<String> getNextNodeIds(String context) {
return null;
}
}

View File

@ -0,0 +1,35 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.demo;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.Data;
import java.util.List;
/**
* 网关配置基类
*/
@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = ExclusiveGatewayConfig.class, name = "EXCLUSIVE"),
@JsonSubTypes.Type(value = ParallelGatewayConfig.class, name = "PARALLEL"),
@JsonSubTypes.Type(value = InclusiveGatewayConfig.class, name = "INCLUSIVE")
})
public abstract class GatewayConfig {
/**
* 网关名称
*/
private String name;
/**
* 网关描述
*/
private String description;
/**
* 获取下一个节点IDs
*/
public abstract List<String> getNextNodeIds(String context);
}

View File

@ -0,0 +1,23 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.demo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import java.util.List;
/**
* 包容网关配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class InclusiveGatewayConfig extends ConditionalGatewayConfig {
private final ExpressionParser expressionParser = new SpelExpressionParser();
@Override
public List<String> getNextNodeIds(String context) {
return null;
}
}

View File

@ -0,0 +1,19 @@
package com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.demo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 并行网关配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ParallelGatewayConfig extends GatewayConfig {
@Override
public List<String> getNextNodeIds(String context) {
return null;
}
}

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import lombok.Data;
import java.util.Map;

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import lombok.Data;
import java.util.List;

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnums;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import lombok.Data;
import lombok.NoArgsConstructor;

View File

@ -1,4 +1,4 @@
package com.qqchen.deploy.backend.workflow.dto.graph;
package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import lombok.Data;
import lombok.experimental.Accessors;

View File

@ -1,12 +0,0 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import lombok.Data;
/**
* 事件节点基础配置
*/
@Data
public abstract class BaseEventNodeConfig extends BaseNodeConfig {
}

View File

@ -1,13 +0,0 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 结束节点配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class EndNodeConfig extends BaseEventNodeConfig {
}

View File

@ -1,49 +0,0 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnums;
import lombok.Data;
/**
* 节点类型配置
*/
@Data
public class NodeTypeSchemaConfig<C extends BaseNodeConfig> {
/**
* 节点类型代码
*/
@SchemaProperty(
title = "节点类型代码",
description = "节点类型的唯一标识",
required = true
)
private NodeTypeEnums code;
/**
* 节点类型名称
*/
@SchemaProperty(
title = "节点类型名称",
description = "节点类型的显示名称",
required = true
)
private String name;
/**
* 节点类型描述
*/
@SchemaProperty(
title = "节点类型描述",
description = "节点类型的详细描述"
)
private String description;
/**
* 节点配置Schema
*/
@SchemaProperty(
title = "配置Schema",
description = "节点类型的配置Schema定义"
)
private C configSchema;
}

View File

@ -1,13 +0,0 @@
package com.qqchen.deploy.backend.workflow.dto.nodeConfig;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 开始节点配置
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class StartNodeConfig extends BaseEventNodeConfig {
}

View File

@ -2,7 +2,7 @@ package com.qqchen.deploy.backend.workflow.entity;
import com.fasterxml.jackson.databind.JsonNode;
import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum;

View File

@ -1,7 +1,7 @@
package com.qqchen.deploy.backend.workflow.enums;
import com.fasterxml.jackson.annotation.JsonValue;
import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowNodeGraph;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowNodeGraph;
import lombok.Getter;
import java.util.Arrays;

View File

@ -3,7 +3,7 @@ package com.qqchen.deploy.backend.workflow.hibernate;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType;

View File

@ -5,7 +5,7 @@ import com.qqchen.deploy.backend.workflow.dto.WorkflowCategoryDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowExecutionDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowTriggerTypeDTO;
import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum;
import com.qqchen.deploy.backend.workflow.enums.WorkflowNodeInstanceStatusEnums;

View File

@ -1,7 +1,9 @@
package com.qqchen.deploy.backend.workflow.util;
import com.qqchen.deploy.backend.workflow.constants.WorkFlowConstants;
import com.qqchen.deploy.backend.workflow.dto.graph.*;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionEdge;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionNode;
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnums;
import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.BpmnAutoLayout;

View File

@ -5,8 +5,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.qqchen.deploy.backend.workflow.annotation.SchemaProperty;
import com.qqchen.deploy.backend.workflow.dto.graph.WorkflowNodeGraph;
import com.qqchen.deploy.backend.workflow.dto.nodeConfig.*;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.BaseNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.EndNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.ScriptNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.node.localVariables.StartNodeLocalVariables;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowNodeGraph;
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnums;
import java.lang.reflect.Field;
@ -28,11 +31,11 @@ public class SchemaGenerator {
private static Class<?> getConfigClassForNodeType(NodeTypeEnums nodeType) {
switch (nodeType) {
case START_EVENT:
return StartNodeConfig.class;
return StartNodeLocalVariables.class;
case END_EVENT:
return EndNodeConfig.class;
return EndNodeLocalVariables.class;
case SCRIPT_TASK:
return ScriptNodeConfig.class;
return ScriptNodeLocalVariables.class;
// 其他节点类型的配置类
// case USER_TASK:
// case SERVICE_TASK:
@ -43,7 +46,7 @@ public class SchemaGenerator {
// TODO: 为其他节点类型添加对应的配置类
// return BaseNodeConfig.class;
default:
return BaseNodeConfig.class;
return BaseNodeLocalVariables.class;
}
}