添加通知管理功能

This commit is contained in:
dengqichen 2025-10-23 17:56:52 +08:00
parent 6eb5a83f58
commit 3003bb6abe
6 changed files with 48 additions and 19 deletions

View File

@ -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<WorkflowNodeInstanceDTO> stages;
/**
* 流程图数据画布快照
*/
private WorkflowDefinitionGraph graph;
}

View File

@ -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<Long> {
@Column(columnDefinition = "TEXT")
private String variables;
/**
* 流程图数据快照启动时保存用于画布还原
*/
@Type(WorkflowGraphType.class)
@Column(name = "graph_snapshot", columnDefinition = "json")
private WorkflowDefinitionGraph graphSnapshot;
/**
* 开始时间
*/

View File

@ -78,14 +78,24 @@ public class WorkflowInstanceServiceImpl extends BaseServiceImpl<WorkflowInstanc
@Override
public WorkflowInstanceDTO createWorkflowInstance(Long workflowDefinitionId, String businessKey, ProcessInstance processInstance) {
// 1. 查询流程定义获取 graph 快照
WorkflowDefinition definition = workflowDefinitionRepository.findById(workflowDefinitionId)
.orElseThrow(() -> 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<WorkflowInstanc
List<WorkflowHistoricalInstancesDTO> 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();
//排序

View File

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

View File

@ -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 '结束时间'

View File

@ -26,5 +26,4 @@ databaseChangeLog:
splitStatements: true
endDelimiter: ";"
rollback:
- empty
- empty