反序列化问题。

This commit is contained in:
dengqichen 2024-12-20 14:04:23 +08:00
parent debef2f881
commit 091ea4fe7b
10 changed files with 46 additions and 50 deletions

View File

@ -1,10 +1,9 @@
package com.qqchen.deploy.backend.workflow.dto; 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.framework.dto.BaseDTO;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.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.WorkflowCategoryEnum;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@ -57,14 +56,9 @@ public class WorkflowDefinitionDTO extends BaseDTO {
private WorkflowDefinitionGraph graph; private WorkflowDefinitionGraph graph;
/** /**
* 表单配置 * 定义状态
*/ */
private JsonNode formConfig; private WorkflowDefinitionStatusEnums status;
/**
* 流程状态
*/
private WorkflowStatusEnums status;
/** /**
* 流程描述 * 流程描述

View File

@ -2,7 +2,7 @@ package com.qqchen.deploy.backend.workflow.dto;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.qqchen.deploy.backend.framework.dto.BaseDTO; import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnums;
import lombok.Data; import lombok.Data;
/** /**
@ -30,5 +30,5 @@ public class WorkflowDesignDTO extends BaseDTO {
*/ */
private JsonNode graphJson; private JsonNode graphJson;
private WorkflowStatusEnums status; private WorkflowDefinitionStatusEnums status;
} }

View File

@ -8,24 +8,21 @@ public class Circle {
@SchemaProperty( @SchemaProperty(
title = "半径", title = "半径",
description = "圆的半径", description = "圆的半径",
required = true, required = true
defaultValue = "4"
) )
private Integer r; private Integer r;
@SchemaProperty( @SchemaProperty(
title = "填充颜色", title = "填充颜色",
description = "圆的填充颜色", description = "圆的填充颜色",
required = true, required = true
defaultValue = "#ffffff"
) )
private String fill; private String fill;
@SchemaProperty( @SchemaProperty(
title = "边框颜色", title = "边框颜色",
description = "圆的边框颜色", description = "圆的边框颜色",
required = true, required = true
defaultValue = "#1890ff"
) )
private String stroke; private String stroke;
} }

View File

@ -1,6 +1,9 @@
package com.qqchen.deploy.backend.workflow.dto.definition.workflow; package com.qqchen.deploy.backend.workflow.dto.definition.workflow;
import com.fasterxml.jackson.databind.JsonNode;
import com.qqchen.deploy.backend.workflow.dto.definition.node.uiVariables.NodeUiVariables;
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnums; import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnums;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import java.util.Map; import java.util.Map;
@ -34,11 +37,16 @@ public class WorkflowDefinitionNode {
*/ */
private String name; private String name;
@Schema(description = "节点UI")
private JsonNode uiVariables;
private WorkflowNodeGraph graph; @Schema(description = "节点属性")
private JsonNode panelVariables;
@Schema(description = "节点环境变量")
private JsonNode localVariables;
@Schema(description = "节点表单")
private JsonNode formVariables;
/**
* 节点配置
*/
private Map<String, Object> localVariables;
} }

View File

@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.qqchen.deploy.backend.framework.annotation.LogicDelete; import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.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.WorkflowCategoryEnum;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowTriggerTypeEnum;
import com.qqchen.deploy.backend.workflow.hibernate.WorkflowGraphType; import com.qqchen.deploy.backend.workflow.hibernate.WorkflowGraphType;
import com.qqchen.deploy.backend.framework.domain.Entity; import com.qqchen.deploy.backend.framework.domain.Entity;
@ -88,7 +88,7 @@ public class WorkflowDefinition extends Entity<Long> {
*/ */
@Column(nullable = false) @Column(nullable = false)
@Enumerated(EnumType.STRING) @Enumerated(EnumType.STRING)
private WorkflowStatusEnums status; private WorkflowDefinitionStatusEnums status;
/** /**
* 流程描述 * 流程描述

View File

@ -3,7 +3,7 @@ package com.qqchen.deploy.backend.workflow.enums;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public enum WorkflowStatusEnums { public enum WorkflowDefinitionStatusEnums {
DRAFT("DRAFT","草稿"), DRAFT("DRAFT","草稿"),
PUBLISHED("PUBLISHED","已发布"), PUBLISHED("PUBLISHED","已发布"),
@ -13,7 +13,7 @@ public enum WorkflowStatusEnums {
private final String description; private final String description;
WorkflowStatusEnums(String code, String description) { WorkflowDefinitionStatusEnums(String code, String description) {
this.code = code; this.code = code;
this.description = description; this.description = description;
} }

View File

@ -2,12 +2,11 @@ package com.qqchen.deploy.backend.workflow.repository;
import com.qqchen.deploy.backend.framework.repository.IBaseRepository; import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition; import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnums;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional; import java.util.Optional;
/** /**
@ -27,5 +26,5 @@ public interface IWorkflowDefinitionRepository extends IBaseRepository<WorkflowD
Optional<WorkflowDefinition> findByKey(String businessKey); Optional<WorkflowDefinition> findByKey(String businessKey);
Page<WorkflowDefinition> findByStatus(WorkflowStatusEnums workflowStatusEnums, Pageable pageable); Page<WorkflowDefinition> findByStatus(WorkflowDefinitionStatusEnums workflowStatusEnums, Pageable pageable);
} }

View File

@ -8,8 +8,8 @@ import com.qqchen.deploy.backend.workflow.dto.WorkflowTriggerTypeDTO;
import com.qqchen.deploy.backend.workflow.dto.definition.workflow.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.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum; import com.qqchen.deploy.backend.workflow.enums.WorkflowCategoryEnum;
import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowNodeInstanceStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowNodeInstanceStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums;
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository; import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService; import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService;
import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService; import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService;
@ -279,7 +279,7 @@ public class WorkflowDefinitionServiceImpl extends BaseServiceImpl<WorkflowDefin
if (deployments.isEmpty()) { if (deployments.isEmpty()) {
// 如果没有部署直接更新状态 // 如果没有部署直接更新状态
definition.setStatus(WorkflowStatusEnums.DISABLED); definition.setStatus(WorkflowDefinitionStatusEnums.DISABLED);
workflowDefinitionRepository.save(definition); workflowDefinitionRepository.save(definition);
return; return;
} }
@ -300,7 +300,7 @@ public class WorkflowDefinitionServiceImpl extends BaseServiceImpl<WorkflowDefin
} }
// 4. 更新我们的流程定义状态 // 4. 更新我们的流程定义状态
definition.setStatus(WorkflowStatusEnums.DISABLED); definition.setStatus(WorkflowDefinitionStatusEnums.DISABLED);
workflowDefinitionRepository.save(definition); workflowDefinitionRepository.save(definition);
log.info("Successfully disabled workflow definition: {}, key: {}, hasHistory: {}", log.info("Successfully disabled workflow definition: {}, key: {}, hasHistory: {}",
@ -329,7 +329,7 @@ public class WorkflowDefinitionServiceImpl extends BaseServiceImpl<WorkflowDefin
definition.setBpmnXml(bpmnConverter.convertToXml(graph, definition.getKey())); definition.setBpmnXml(bpmnConverter.convertToXml(graph, definition.getKey()));
Deployment deployment = this.deployWorkflow(definition); Deployment deployment = this.deployWorkflow(definition);
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult(); ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
definition.setStatus(WorkflowStatusEnums.PUBLISHED); definition.setStatus(WorkflowDefinitionStatusEnums.PUBLISHED);
definition.setFlowVersion(1); definition.setFlowVersion(1);
definition.setProcessDefinitionId(processDefinition.getId()); definition.setProcessDefinitionId(processDefinition.getId());
workflowDefinitionRepository.save(definition); workflowDefinitionRepository.save(definition);

View File

@ -8,14 +8,13 @@ import com.qqchen.deploy.backend.workflow.converter.WorkflowNodeInstanceConverte
import com.qqchen.deploy.backend.workflow.dto.WorkflowHistoricalInstancesDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowHistoricalInstancesDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceStartRequest; import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceStartRequest;
import com.qqchen.deploy.backend.workflow.dto.WorkflowNodeInstanceDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowTemplateWithInstancesDTO; import com.qqchen.deploy.backend.workflow.dto.WorkflowTemplateWithInstancesDTO;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition; import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance; import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance;
import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeInstance; import com.qqchen.deploy.backend.workflow.entity.WorkflowNodeInstance;
import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowNodeInstanceStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowNodeInstanceStatusEnums;
import com.qqchen.deploy.backend.workflow.enums.WorkflowStatusEnums; import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnums;
import com.qqchen.deploy.backend.workflow.query.WorkflowDefinitionQuery; import com.qqchen.deploy.backend.workflow.query.WorkflowDefinitionQuery;
import com.qqchen.deploy.backend.workflow.query.WorkflowHistoricalInstancesQuery; import com.qqchen.deploy.backend.workflow.query.WorkflowHistoricalInstancesQuery;
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository; import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
@ -28,7 +27,6 @@ import lombok.extern.slf4j.Slf4j;
import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.FlowElement;
import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.SequenceFlow;
import org.flowable.engine.HistoryService; import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
@ -193,7 +191,7 @@ public class WorkflowInstanceServiceImpl extends BaseServiceImpl<WorkflowInstanc
@Override @Override
public Page<WorkflowTemplateWithInstancesDTO> findTemplatesWithRecentInstances(WorkflowDefinitionQuery query) { public Page<WorkflowTemplateWithInstancesDTO> findTemplatesWithRecentInstances(WorkflowDefinitionQuery query) {
Pageable pageable = PageRequest.of(query.getPageNum() - 1, query.getPageSize()); Pageable pageable = PageRequest.of(query.getPageNum() - 1, query.getPageSize());
Page<WorkflowDefinition> definitionPage = workflowDefinitionRepository.findByStatus(WorkflowStatusEnums.PUBLISHED, pageable); Page<WorkflowDefinition> definitionPage = workflowDefinitionRepository.findByStatus(WorkflowDefinitionStatusEnums.PUBLISHED, pageable);
List<WorkflowTemplateWithInstancesDTO> result = definitionPage.getContent().stream().map(definition -> { List<WorkflowTemplateWithInstancesDTO> result = definitionPage.getContent().stream().map(definition -> {
List<WorkflowInstance> workflowInstances = workflowInstanceRepository.findTop1ByWorkflowDefinitionIdOrderByCreateTimeDesc(definition.getId()); List<WorkflowInstance> workflowInstances = workflowInstanceRepository.findTop1ByWorkflowDefinitionIdOrderByCreateTimeDesc(definition.getId());
WorkflowTemplateWithInstancesDTO workflowTemplateWithInstancesDTO = new WorkflowTemplateWithInstancesDTO(); WorkflowTemplateWithInstancesDTO workflowTemplateWithInstancesDTO = new WorkflowTemplateWithInstancesDTO();

View File

@ -139,9 +139,9 @@ public class BpmnConverter {
if (element instanceof ServiceTask) { if (element instanceof ServiceTask) {
ServiceTask serviceTask = (ServiceTask) element; ServiceTask serviceTask = (ServiceTask) element;
// 设置委托表达式 // 设置委托表达式
String delegate = (String) node.getLocalVariables().get("delegate"); // String delegate = (String) node.getLocalVariables().get("delegate");
serviceTask.setImplementationType("delegateExpression"); // serviceTask.setImplementationType("delegateExpression");
serviceTask.setImplementation(delegate); // serviceTask.setImplementation(delegate);
// 配置重试策略 // 配置重试策略
ExtensionElement retryConfig = new ExtensionElement(); ExtensionElement retryConfig = new ExtensionElement();
@ -155,18 +155,18 @@ public class BpmnConverter {
extensionElements.put("failedJobRetryTimeCycle", retryElements); extensionElements.put("failedJobRetryTimeCycle", retryElements);
// 添加字段注入 // 添加字段注入
List<FieldExtension> fieldExtensions = new ArrayList<>(); // List<FieldExtension> fieldExtensions = new ArrayList<>();
node.getLocalVariables().forEach((key, value) -> { // node.getLocalVariables().forEach((key, value) -> {
if (value != null && !"delegate".equals(key)) { // if (value != null && !"delegate".equals(key)) {
FieldExtension fieldExtension = new FieldExtension(); // FieldExtension fieldExtension = new FieldExtension();
fieldExtension.setFieldName(key); // fieldExtension.setFieldName(key);
fieldExtension.setStringValue(String.valueOf(value)); // fieldExtension.setStringValue(String.valueOf(value));
fieldExtensions.add(fieldExtension); // fieldExtensions.add(fieldExtension);
} // }
}); // });
// 设置到服务任务 // 设置到服务任务
serviceTask.setFieldExtensions(fieldExtensions); // serviceTask.setFieldExtensions(fieldExtensions);
serviceTask.setExtensionElements(extensionElements); serviceTask.setExtensionElements(extensionElements);
// 添加错误边界事件 // 添加错误边界事件