From 3003bb6abe24a880dc58ec2e38bb942d67893904 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Thu, 23 Oct 2025 17:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=80=9A=E7=9F=A5=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/WorkflowHistoricalInstancesDTO.java | 9 +++++++++ .../workflow/entity/WorkflowInstance.java | 10 ++++++++++ .../impl/WorkflowInstanceServiceImpl.java | 14 ++++++++++++++ .../db/changelog/changes/v1.0.0-data.sql | 16 +++++++--------- .../db/changelog/changes/v1.0.0-schema.sql | 15 +++++++-------- .../db/changelog/db.changelog-master.yaml | 3 +-- 6 files changed, 48 insertions(+), 19 deletions(-) diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowHistoricalInstancesDTO.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowHistoricalInstancesDTO.java index 4499f592..7cfcdf98 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowHistoricalInstancesDTO.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/dto/WorkflowHistoricalInstancesDTO.java @@ -1,5 +1,6 @@ package com.qqchen.deploy.backend.workflow.dto; +import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph; import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums; import lombok.Data; @@ -9,6 +10,14 @@ import java.util.List; @Data public class WorkflowHistoricalInstancesDTO extends WorkflowInstanceDTO { + /** + * 节点执行阶段列表 + */ private List stages; + + /** + * 流程图数据(画布快照) + */ + private WorkflowDefinitionGraph graph; } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowInstance.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowInstance.java index f3319a10..c1361fc0 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowInstance.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/entity/WorkflowInstance.java @@ -1,6 +1,8 @@ package com.qqchen.deploy.backend.workflow.entity; import com.qqchen.deploy.backend.framework.domain.Entity; +import com.qqchen.deploy.backend.workflow.dto.definition.workflow.WorkflowDefinitionGraph; +import com.qqchen.deploy.backend.workflow.entity.converter.WorkflowGraphType; import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums; import jakarta.persistence.Column; import jakarta.persistence.EnumType; @@ -8,6 +10,7 @@ import jakarta.persistence.Enumerated; import jakarta.persistence.Table; import lombok.Data; import lombok.EqualsAndHashCode; +import org.hibernate.annotations.Type; import java.time.LocalDateTime; @@ -54,6 +57,13 @@ public class WorkflowInstance extends Entity { @Column(columnDefinition = "TEXT") private String variables; + /** + * 流程图数据快照(启动时保存,用于画布还原) + */ + @Type(WorkflowGraphType.class) + @Column(name = "graph_snapshot", columnDefinition = "json") + private WorkflowDefinitionGraph graphSnapshot; + /** * 开始时间 */ diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowInstanceServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowInstanceServiceImpl.java index eba63071..cec93549 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowInstanceServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/service/impl/WorkflowInstanceServiceImpl.java @@ -78,14 +78,24 @@ public class WorkflowInstanceServiceImpl extends BaseServiceImpl new RuntimeException("Workflow definition not found: " + workflowDefinitionId)); + + // 2. 创建实例并保存 graph 快照 WorkflowInstance workflowInstance = new WorkflowInstance(); workflowInstance.setProcessInstanceId(processInstance.getId()); workflowInstance.setProcessDefinitionId(processInstance.getProcessDefinitionId()); workflowInstance.setWorkflowDefinitionId(workflowDefinitionId); workflowInstance.setBusinessKey(businessKey); + workflowInstance.setGraphSnapshot(definition.getGraph()); // ✅ 保存画布数据快照 workflowInstance.setStatus(WorkflowInstanceStatusEnums.NOT_STARTED); workflowInstance.setStartTime(LocalDateTime.now()); workflowInstanceRepository.save(workflowInstance); + + log.info("创建工作流实例: instanceId={}, definitionId={}, graph已保存", + workflowInstance.getId(), workflowDefinitionId); + // 3. 返回创建结果 return workflowInstanceConverter.toDto(workflowInstance); } @@ -217,6 +227,10 @@ public class WorkflowInstanceServiceImpl extends BaseServiceImpl result = new ArrayList<>(); workflowInstances.getContent().stream().map(workflowInstance -> { WorkflowHistoricalInstancesDTO workflowHistoricalInstancesDTO = workflowInstanceConverter.toWorkflowHistoricalInstancesDTO(workflowInstance); + + // ✅ 设置画布数据快照(从实例中读取,无需查询定义) + workflowHistoricalInstancesDTO.setGraph(workflowInstance.getGraphSnapshot()); + BpmnModel bpmnModel = repositoryService.getBpmnModel(workflowInstance.getProcessDefinitionId()); Process process = bpmnModel.getMainProcess(); //排序 diff --git a/backend/src/main/resources/db/changelog/changes/v1.0.0-data.sql b/backend/src/main/resources/db/changelog/changes/v1.0.0-data.sql index ea01a0d7..4f29c996 100644 --- a/backend/src/main/resources/db/changelog/changes/v1.0.0-data.sql +++ b/backend/src/main/resources/db/changelog/changes/v1.0.0-data.sql @@ -202,11 +202,11 @@ INSERT INTO workflow_definition ( -- 基础信息 name, `key`, process_definition_id, flow_version, description, category, triggers, -- 流程配置 - graph, local_variables_schema, tags, + graph, tags, -- 流程属性 - status, is_executable, target_namespace, + status, -- 审计字段 - created_at, updated_at, created_by, updated_by, is_deleted + create_time, update_time, create_by, update_by, deleted, version ) VALUES -- 简单脚本流程:开始 -> 脚本任务 -> 结束 ( @@ -371,10 +371,9 @@ INSERT INTO workflow_definition ( "properties" : null } ] }', - '{"formItems":[]}', '["simple","script","test"]', - 'DRAFT', TRUE, 'http://www.flowable.org/test', - NOW(), NOW(), 1, 1, FALSE + 'DRAFT', + NOW(), NOW(), NULL, NULL, 0, 0 ), -- 复杂业务流程:开始 -> 脚本任务A -> 脚本任务B -> 结束 @@ -603,10 +602,9 @@ INSERT INTO workflow_definition ( "properties" : null } ] }', - '{"formItems":[{"type":"input","label":"业务参数","name":"businessParam","required":true}]}', '["complex","business","multi-task"]', - 'DRAFT', TRUE, 'http://www.flowable.org/test', - NOW(), NOW(), 1, 1, FALSE + 'DRAFT', + NOW(), NOW(), NULL, NULL, 0, 0 ); diff --git a/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql b/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql index 99286eef..c5ac9400 100644 --- a/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql +++ b/backend/src/main/resources/db/changelog/changes/v1.0.0-schema.sql @@ -389,20 +389,18 @@ CREATE TABLE workflow_definition -- 流程配置 bpmn_xml TEXT COMMENT 'BPMN XML内容', graph JSON COMMENT '流程图数据,包含节点和连线的位置、样式等信息', - local_variables_schema JSON COMMENT '节点变量Schema', tags JSON COMMENT '流程标签', -- 流程属性 status VARCHAR(50) NOT NULL COMMENT '流程状态(DRAFT-草稿、PUBLISHED-已发布、DISABLED-已禁用)', - is_executable BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否可执行', - target_namespace VARCHAR(255) DEFAULT 'http://www.flowable.org/test' COMMENT '目标命名空间', -- 审计字段 - created_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间', - updated_at DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间', - created_by BIGINT COMMENT '创建人', - updated_by BIGINT COMMENT '更新人', - is_deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除', + create_by VARCHAR(255) NULL COMMENT '创建人', + create_time DATETIME(6) NULL COMMENT '创建时间', + deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)', + update_by VARCHAR(255) NULL COMMENT '更新人', + update_time DATETIME(6) NULL COMMENT '更新时间', + version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号', -- 约束 UNIQUE KEY uk_key_version (`key`, flow_version) @@ -454,6 +452,7 @@ CREATE TABLE workflow_instance business_key VARCHAR(64) NULL COMMENT '业务标识', status VARCHAR(100) NOT NULL COMMENT '实例状态', variables TEXT NULL COMMENT '流程变量(JSON)', + graph_snapshot JSON NULL COMMENT '流程图数据快照(启动时保存,用于画布还原)', start_time DATETIME(6) NULL COMMENT '开始时间', end_time DATETIME(6) NULL COMMENT '结束时间' diff --git a/backend/src/main/resources/db/changelog/db.changelog-master.yaml b/backend/src/main/resources/db/changelog/db.changelog-master.yaml index 1ae21255..3d3a6566 100644 --- a/backend/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/backend/src/main/resources/db/changelog/db.changelog-master.yaml @@ -26,5 +26,4 @@ databaseChangeLog: splitStatements: true endDelimiter: ";" rollback: - - empty - + - empty \ No newline at end of file