This commit is contained in:
asp_ly 2024-12-15 18:10:01 +08:00
parent ccac93e4a8
commit 42fde0d2d2
11 changed files with 314 additions and 672 deletions

View File

@ -67,22 +67,6 @@ public class WorkflowDefinitionApiController extends BaseController<WorkflowDefi
// return Response.success(workflowDefinitionService.deployWorkflow(dto));
// }
@Operation(summary = "启动工作流实例")
@PostMapping("/start")
public Response<WorkflowInstanceDTO> startWorkflow(
@Parameter(description = "流程标识", required = true) @RequestParam String processKey,
@Parameter(description = "业务标识", required = true) @RequestParam String businessKey
) {
Map<String, Object> variables = new HashMap<>();
try {
// 同步创建实例立即返回实例ID
return Response.success(workflowDefinitionService.startWorkflow(processKey, businessKey, variables));
} catch (Exception e) {
log.error("Failed to start workflow", e);
return Response.error(ResponseCode.WORKFLOW_EXECUTION_ERROR);
}
}
@Operation(summary = "挂起工作流实例")
@PostMapping("/{processInstanceId}/suspend")
public Response<Void> suspendWorkflow(

View File

@ -0,0 +1,63 @@
package com.qqchen.deploy.backend.workflow.api;
import com.qqchen.deploy.backend.framework.api.Response;
import com.qqchen.deploy.backend.framework.controller.BaseController;
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowExecutionDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance;
import com.qqchen.deploy.backend.workflow.query.WorkflowDefinitionQuery;
import com.qqchen.deploy.backend.workflow.query.WorkflowInstanceQuery;
import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService;
import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.variable.api.history.HistoricVariableInstance;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 工作流定义控制器
*/
@Slf4j
@RestController
@RequestMapping("/api/v1/workflow/instance")
@Tag(name = "工作流实例管理", description = "工作流定义实例相关接口")
public class WorkflowInstanceApiController extends BaseController<WorkflowInstance, WorkflowInstanceDTO, Long, WorkflowInstanceQuery> {
@Resource
private IWorkflowInstanceService workflowInstanceService;
@Operation(summary = "启动工作流")
@PostMapping("/start")
public Response<WorkflowInstanceDTO> startWorkflow(
@RequestParam String processKey,
@RequestParam String businessKey) {
return Response.success(workflowInstanceService.startWorkflow(processKey, businessKey));
}
@Override
protected void exportData(HttpServletResponse response, List<WorkflowInstanceDTO> data) {
}
}

View File

@ -10,11 +10,6 @@ import lombok.Getter;
@Getter
public enum WorkflowInstanceStatusEnums {
/**
* 未开始节点尚未开始执行
*/
NOT_STARTED("NOT_STARTED", "未开始"),
/**
* 已创建流程实例已创建但还未开始运行
*/

View File

@ -0,0 +1,15 @@
package com.qqchen.deploy.backend.workflow.query;
import com.qqchen.deploy.backend.framework.query.BaseQuery;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 工作流定义查询对象
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WorkflowInstanceQuery extends BaseQuery {
}

View File

@ -1,5 +1,6 @@
package com.qqchen.deploy.backend.workflow.repository;
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@ -8,7 +9,7 @@ import java.util.List;
import java.util.Optional;
@Repository
public interface IWorkflowInstanceRepository extends JpaRepository<WorkflowInstance, Long> {
public interface IWorkflowInstanceRepository extends IBaseRepository<WorkflowInstance, Long> {
/**
* 根据Flowable流程实例ID查询工作流实例

View File

@ -28,16 +28,6 @@ public interface IWorkflowDefinitionService extends IBaseService<WorkflowDefinit
*/
Deployment deployWorkflow(WorkflowDefinition workflowDefinition);
/**
* 启动工作流实例
*
* @param processKey 流程标识
* @param businessKey 业务标识
* @param variables 流程变量
* @return 流程实例
*/
WorkflowInstanceDTO startWorkflow(String processKey, String businessKey, Map<String, Object> variables);
/**
* 挂起工作流实例
*

View File

@ -1,6 +1,9 @@
package com.qqchen.deploy.backend.workflow.service;
import com.qqchen.deploy.backend.framework.service.IBaseService;
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance;
import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums;
import org.flowable.engine.runtime.ProcessInstance;
@ -8,7 +11,7 @@ import org.flowable.engine.runtime.ProcessInstance;
import java.util.List;
import java.util.Map;
public interface IWorkflowInstanceService {
public interface IWorkflowInstanceService extends IBaseService<WorkflowInstance, WorkflowInstanceDTO, Long> {
/**
* 创建工作流实例并关联Flowable实例
@ -50,4 +53,6 @@ public interface IWorkflowInstanceService {
* @param variables 完成时的变量
*/
void completeInstance(String processInstanceId, Map<String, Object> variables);
WorkflowInstanceDTO startWorkflow(String processKey, String businessKey);
}

View File

@ -102,24 +102,6 @@ public class WorkflowDefinitionServiceImpl extends BaseServiceImpl<WorkflowDefin
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public WorkflowInstanceDTO startWorkflow(String processKey, String businessKey, Map<String, Object> variables) {
try {
// 2. 创建工作流实例记录
WorkflowDefinition workflowDefinition = workflowDefinitionRepository.findByKey(processKey).orElseThrow(() -> new RuntimeException("Workflow definition process key not found: " + processKey));
// 1. 创建并异步启动流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder()
.processDefinitionKey(processKey)
.businessKey(businessKey)
.variables(variables)
.startAsync(); // 异步启动会自动执行 shell 任务
return workflowInstanceService.createWorkflowInstance(workflowDefinition.getId(), businessKey, processInstance);
} catch (Exception e) {
log.error("Failed to create workflow: {}", processKey, e);
throw new RuntimeException("Failed to create workflow", e);
}
}
@Override
public void suspendWorkflow(String processInstanceId) {

View File

@ -2,11 +2,16 @@ package com.qqchen.deploy.backend.workflow.service.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qqchen.deploy.backend.framework.service.impl.BaseServiceImpl;
import com.qqchen.deploy.backend.workflow.converter.WorkflowInstanceConverter;
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
import com.qqchen.deploy.backend.workflow.dto.WorkflowInstanceDTO;
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance;
import com.qqchen.deploy.backend.workflow.enums.WorkflowInstanceStatusEnums;
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
import com.qqchen.deploy.backend.workflow.repository.IWorkflowInstanceRepository;
import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService;
import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
@ -24,22 +29,27 @@ import java.util.stream.Collectors;
@Slf4j
@Service
@RequiredArgsConstructor
public class WorkflowInstanceServiceImpl implements IWorkflowInstanceService {
public class WorkflowInstanceServiceImpl extends BaseServiceImpl<WorkflowInstance, WorkflowInstanceDTO, Long> implements IWorkflowInstanceService {
private final IWorkflowInstanceRepository workflowInstanceRepository;
@Resource
private IWorkflowDefinitionRepository workflowDefinitionRepository;
private final RuntimeService runtimeService;
@Resource
private IWorkflowInstanceRepository workflowInstanceRepository;
private final HistoryService historyService;
@Resource
private RuntimeService runtimeService;
private final ObjectMapper objectMapper;
@Resource
private HistoryService historyService;
@Resource
private ObjectMapper objectMapper;
@Resource
private WorkflowInstanceConverter workflowInstanceConverter;
@Override
@Transactional
public WorkflowInstanceDTO createWorkflowInstance(Long workflowDefinitionId, String businessKey, ProcessInstance processInstance) {
WorkflowInstance workflowInstance = new WorkflowInstance();
workflowInstance.setProcessInstanceId(processInstance.getId());
@ -139,6 +149,22 @@ public class WorkflowInstanceServiceImpl implements IWorkflowInstanceService {
workflowInstanceRepository.save(instance);
}
@Override
@Transactional
public WorkflowInstanceDTO startWorkflow(String processKey, String businessKey) {
try {
WorkflowDefinition workflowDefinition = workflowDefinitionRepository.findByKey(processKey).orElseThrow(() -> new RuntimeException("Workflow definition process key not found: " + processKey));
ProcessInstance processInstance = runtimeService.createProcessInstanceBuilder()
.processDefinitionKey(processKey)
.businessKey(businessKey)
.startAsync(); // 异步启动会自动执行 shell 任务
return createWorkflowInstance(workflowDefinition.getId(), businessKey, processInstance);
} catch (Exception e) {
log.error("Failed to create workflow: {}", processKey, e);
throw new RuntimeException("Failed to create workflow", e);
}
}
// private WorkflowInstanceDTO.ActivityInstance convertToActivityInstance(HistoricActivityInstance hai) {
// WorkflowInstanceDTO.ActivityInstance ai = new WorkflowInstanceDTO.ActivityInstance();
// ai.setId(hai.getId());

View File

@ -3,65 +3,26 @@
-- --------------------------------------------------------------------------------------
-- 租户表
CREATE TABLE IF NOT EXISTS sys_tenant
(
id
BIGINT
AUTO_INCREMENT
PRIMARY
KEY
COMMENT
'主键ID',
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 '乐观锁版本号',
CREATE TABLE sys_tenant (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
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 '乐观锁版本号',
code VARCHAR(50) NOT NULL COMMENT '租户编码',
name VARCHAR(100) NOT NULL COMMENT '租户名称',
address VARCHAR(255) NULL COMMENT '租户地址',
contact_name VARCHAR(50) NULL COMMENT '联系人姓名',
contact_phone VARCHAR(20) NULL COMMENT '联系人电话',
email VARCHAR(100) NULL COMMENT '联系人邮箱',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
CONSTRAINT UK_tenant_code UNIQUE (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
code VARCHAR
(
50
) NOT NULL COMMENT '租户编码',
NAME VARCHAR
(
100
) NOT NULL COMMENT '租户名称',
address VARCHAR
(
255
) NULL COMMENT '租户地址',
contact_name VARCHAR
(
50
) NULL COMMENT '联系人姓名',
contact_phone VARCHAR
(
20
) NULL COMMENT '联系人电话',
email VARCHAR
(
100
) NULL COMMENT '联系人邮箱',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
CONSTRAINT UK_tenant_code UNIQUE
(
code
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE =utf8mb4_unicode_ci COMMENT='租户表';
-- 部门表
CREATE TABLE sys_department
@ -87,69 +48,26 @@ CREATE TABLE sys_department
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='部门表';
-- 用户表
CREATE TABLE IF NOT EXISTS sys_user
(
id
BIGINT
AUTO_INCREMENT
PRIMARY
KEY
COMMENT
'主键ID',
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 '乐观锁版本号',
CREATE TABLE sys_user (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
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 '乐观锁版本号',
username VARCHAR
(
50
) NOT NULL COMMENT '用户名',
password VARCHAR
(
255
) NOT NULL COMMENT '密码',
nickname VARCHAR
(
50
) NULL COMMENT '昵称',
email VARCHAR
(
100
) NULL COMMENT '邮箱',
phone VARCHAR
(
20
) NULL COMMENT '手机号',
department_id BIGINT NULL COMMENT '所属部门ID',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
CONSTRAINT UK_user_username UNIQUE
(
username
),
CONSTRAINT FK_user_department FOREIGN KEY
(
department_id
) REFERENCES sys_department
(
id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE =utf8mb4_unicode_ci COMMENT='用户表';
username VARCHAR(50) NOT NULL COMMENT '用户名',
password VARCHAR(255) NOT NULL COMMENT '密码',
nickname VARCHAR(50) NULL COMMENT '昵称',
email VARCHAR(100) NULL COMMENT '邮箱',
phone VARCHAR(20) NULL COMMENT '手机号',
department_id BIGINT NULL COMMENT '所属部门ID',
enabled BIT NOT NULL DEFAULT 1 COMMENT '是否启用0禁用1启用',
CONSTRAINT UK_user_username UNIQUE (username),
CONSTRAINT FK_user_department FOREIGN KEY (department_id) REFERENCES sys_department(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
-- 系统参数表
CREATE TABLE sys_param
@ -518,6 +436,27 @@ CREATE TABLE workflow_definition
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='工作流定义表';
-- 创建工作流节点定义表
CREATE TABLE workflow_node_definition
(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
type VARCHAR(50) NOT NULL COMMENT '节点类型编码',
name VARCHAR(100) NOT NULL COMMENT '节点名称',
description VARCHAR(500) COMMENT '节点描述',
category VARCHAR(50) NOT NULL COMMENT '节点分类',
graph_config JSON NOT NULL COMMENT 'X6图形配置JSON',
order_num INT NOT NULL DEFAULT 0 COMMENT '排序号',
enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
create_time DATETIME NOT NULL COMMENT '创建时间',
create_by VARCHAR(50) NOT NULL COMMENT '创建人',
update_time DATETIME NOT NULL COMMENT '更新时间',
update_by VARCHAR(50) NOT NULL COMMENT '更新人',
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除',
PRIMARY KEY (id),
UNIQUE KEY uk_type (TYPE)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点定义表';
-- 工作流实例表
CREATE TABLE workflow_instance
(
@ -586,23 +525,3 @@ CREATE TABLE workflow_log
CONSTRAINT FK_workflow_log_node_instance FOREIGN KEY (node_instance_id) REFERENCES workflow_node_instance (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流日志表';
-- 创建工作流节点定义表
CREATE TABLE workflow_node_definition
(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
type VARCHAR(50) NOT NULL COMMENT '节点类型编码',
name VARCHAR(100) NOT NULL COMMENT '节点名称',
description VARCHAR(500) COMMENT '节点描述',
category VARCHAR(50) NOT NULL COMMENT '节点分类',
graph_config TEXT NOT NULL COMMENT 'X6图形配置JSON',
order_num INT NOT NULL DEFAULT 0 COMMENT '排序号',
enabled BOOLEAN NOT NULL DEFAULT TRUE COMMENT '是否启用',
create_time DATETIME NOT NULL COMMENT '创建时间',
create_by VARCHAR(50) NOT NULL COMMENT '创建人',
update_time DATETIME NOT NULL COMMENT '更新时间',
update_by VARCHAR(50) NOT NULL COMMENT '更新人',
version INT NOT NULL DEFAULT 1 COMMENT '版本号',
deleted BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否删除',
PRIMARY KEY (id),
UNIQUE KEY uk_type (TYPE)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流节点定义表';

View File

@ -670,489 +670,151 @@ VALUES
}
}', 1);
-- 任务节点
-- INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
-- VALUES
-- (3, NOW(),
-- 'system',
-- NOW(),
-- 'system', 'USER_TASK', '用户任务', '人工处理任务', 'TASK', '{
-- "code": "USER_TASK",
-- "name": "用户任务",
-- "description": "人工处理任务",
-- "details": {
-- "description": "需要人工处理的任务节点,支持任务分配、表单填写、处理期限等功能",
-- "features": ["分配任务给指定用户或角色", "支持任务表单的填写", "设置处理期限和提醒", "支持任务的转办、委托、退回"],
-- "scenarios": ["审批流程", "表单填写", "人工审核", "数据确认"]
-- },
-- "configSchema": {
-- "type": "object",
-- "properties": {
-- "code": {"type": "string", "title": "节点Code", "description": "工作流节点的Code"},
-- "name": {"type": "string", "title": "节点名称", "description": "工作流节点的显示名称"},
-- "description": {"type": "string", "title": "节点描述", "description": "工作流节点的详细描述"}
-- },
-- "required": ["code", "name"]
-- },
-- "uiSchema": {
-- "shape": "rect",
-- "size": {"width": 120, "height": 60},
-- "style": {
-- "fill": "#ffffff",
-- "stroke": "#1890ff",
-- "strokeWidth": 2,
-- "icon": "user",
-- "iconColor": "#1890ff"
-- },
-- "ports": {
-- "groups": {
-- "in": {
-- "position": "left",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- },
-- "out": {
-- "position": "right",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- }
-- }
-- }
-- }
-- }', 1);
-- INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
-- VALUES
-- (4, NOW(),
-- 'system',
-- NOW(),
-- 'system', 'SERVICE_TASK', '服务任务', '系统服务调用', 'TASK', '{
-- "code": "SERVICE_TASK",
-- "name": "服务任务",
-- "description": "系统服务调用",
-- "details": {
-- "description": "自动执行的系统服务任务,支持同步/异步调用外部服务和系统API",
-- "features": ["调用系统服务或外部接口", "执行自动化操作", "支持异步执行和结果回调", "数据转换和处理"],
-- "scenarios": ["调用外部系统API", "发送通知消息", "数据同步处理", "自动化操作"]
-- },
-- "configSchema": {
-- "type": "object",
-- "properties": {
-- "code": {"type": "string", "title": "节点Code", "description": "工作流节点的Code"},
-- "name": {"type": "string", "title": "节点名称", "description": "工作流节点的显示名称"},
-- "description": {"type": "string", "title": "节点描述", "description": "工作流节点的详细描述"}
-- },
-- "required": ["code", "name"]
-- },
-- "uiSchema": {
-- "shape": "rect",
-- "size": {"width": 120, "height": 60},
-- "style": {
-- "fill": "#ffffff",
-- "stroke": "#1890ff",
-- "strokeWidth": 2,
-- "icon": "api",
-- "iconColor": "#1890ff"
-- },
-- "ports": {
-- "groups": {
-- "in": {
-- "position": "left",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- },
-- "out": {
-- "position": "right",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- }
-- }
-- }
-- }
-- }', 1);
INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
VALUES
(5, NOW(),
'system',
NOW(),
'system', 'SCRIPT_TASK', '脚本任务', '脚本执行任务', 'TASK', '{
"code" : "SCRIPT_TASK",
"name" : "脚本任务",
"details" : {
"description" : "脚本执行任务",
"features" : [ ],
"scenarios" : [ ]
},
"configSchema" : {
"type" : "object",
"properties" : {
"code" : {
"type" : "string",
"title" : "节点Code",
"description" : "工作流节点的Code"
},
"name" : {
"type" : "string",
"title" : "节点名称",
"description" : "工作流节点的显示名称"
},
"description" : {
"type" : "string",
"title" : "节点描述",
"description" : "工作流节点的详细描述"
},
"script" : {
"type" : "string",
"title" : "脚本内容",
"description" : "需要执行的脚本内容,例如:\n#!/bin/bash\necho \"\"\nls -la\necho \"\"",
"format" : "textarea"
},
"language" : {
"type" : "string",
"title" : "脚本语言",
"description" : "脚本语言类型",
"default" : "shell",
"enum" : [ "shell", "python", "javascript", "groovy" ],
"enumNames" : [ "Shell脚本 (已支持)", "Python脚本 (开发中)", "JavaScript脚本 (开发中)", "Groovy脚本 (开发中)" ]
},
"interpreter" : {
"type" : "string",
"title" : "解释器路径",
"description" : "脚本解释器的路径,例如:/bin/bash, /usr/bin/python3"
},
"workingDirectory" : {
"type" : "string",
"title" : "工作目录",
"description" : "脚本执行的工作目录",
"default" : "/tmp"
},
"environment" : {
"type" : "object",
"title" : "环境变量",
"description" : "脚本执行时的环境变量",
"additionalProperties" : {
"type" : "string"
}
},
"successExitCode" : {
"type" : "integer",
"title" : "成功退出码",
"description" : "脚本执行成功时的退出码",
"default" : 0
},
"supportedLanguages" : {
"type" : "array",
"title" : "支持的脚本语言",
"enum" : [ "shell", "python", "javascript", "groovy" ],
"items" : {
"type" : "string"
}
},
"delegate" : {
"type" : "string",
"title" : "执行委派者",
"description" : "执行委派者",
"default" : "$${shellTaskDelegate}"
}
"code": "SCRIPT_TASK",
"name": "脚本任务",
"details": {
"description": "脚本执行任务",
"features": [],
"scenarios": []
},
"required" : [ "code", "name", "script", "language", "interpreter", "delegate" ]
},
"uiSchema" : {
"shape" : "rect",
"size" : {
"width" : 120,
"height" : 60
},
"style" : {
"fill" : "#ffffff",
"stroke" : "#1890ff",
"strokeWidth" : 2,
"icon" : "code",
"iconColor" : "#1890ff"
},
"ports" : {
"groups" : {
"in" : {
"position" : "left",
"attrs" : {
"circle" : {
"r" : 4,
"fill" : "#ffffff",
"stroke" : "#1890ff"
"configSchema": {
"type": "object",
"properties": {
"code": {
"type": "string",
"title": "节点Code",
"description": "工作流节点的Code"
},
"name": {
"type": "string",
"title": "节点名称",
"description": "工作流节点的显示名称"
},
"description": {
"type": "string",
"title": "节点描述",
"description": "工作流节点的详细描述"
},
"script": {
"type": "string",
"title": "脚本内容",
"description": "需要执行的脚本内容,例如:\\n#!/bin/bash\\necho \\\"\\\"\\nls -la\\necho \\\"\\\"",
"format": "textarea"
},
"language": {
"type": "string",
"title": "脚本语言",
"description": "脚本语言类型",
"default": "shell",
"enum": [
"shell",
"python",
"javascript",
"groovy"
],
"enumNames": [
"Shell脚本 (已支持)",
"Python脚本 (开发中)",
"JavaScript脚本 (开发中)",
"Groovy脚本 (开发中)"
]
},
"interpreter": {
"type": "string",
"title": "解释器路径",
"description": "脚本解释器的路径,例如:/bin/bash, /usr/bin/python3"
},
"workingDirectory": {
"type": "string",
"title": "工作目录",
"description": "脚本执行的工作目录",
"default": "/tmp"
},
"environment": {
"type": "object",
"title": "环境变量",
"description": "脚本执行时的环境变量",
"additionalProperties": {
"type": "string"
}
},
"successExitCode": {
"type": "integer",
"title": "成功退出码",
"description": "脚本执行成功时的退出码",
"default": 0
},
"supportedLanguages": {
"type": "array",
"title": "支持的脚本语言",
"enum": [
"shell",
"python",
"javascript",
"groovy"
],
"items": {
"type": "string"
}
},
"delegate": {
"type": "string",
"title": "执行委派者",
"description": "执行委派者",
"default": "${shellTaskDelegate}"
}
}
},
"out" : {
"position" : "right",
"attrs" : {
"circle" : {
"r" : 4,
"fill" : "#ffffff",
"stroke" : "#1890ff"
"required": [
"code",
"name",
"script",
"language",
"interpreter",
"delegate"
]
},
"uiSchema": {
"shape": "rect",
"size": {
"width": 120,
"height": 60
},
"style": {
"fill": "#ffffff",
"stroke": "#1890ff",
"strokeWidth": 2,
"icon": "code",
"iconColor": "#1890ff"
},
"ports": {
"groups": {
"in": {
"position": "left",
"attrs": {
"circle": {
"r": 4,
"fill": "#ffffff",
"stroke": "#1890ff"
}
}
},
"out": {
"position": "right",
"attrs": {
"circle": {
"r": 4,
"fill": "#ffffff",
"stroke": "#1890ff"
}
}
}
}
}
}
}
}
}
}', 1);
--
-- -- 网关节点
-- INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
-- VALUES
-- (6, NOW(),
-- 'system',
-- NOW(),
-- 'system', 'EXCLUSIVE_GATEWAY', '排他网关', '条件分支控制', 'GATEWAY', '{
-- "code": "EXCLUSIVE_GATEWAY",
-- "name": "排他网关",
-- "description": "条件分支控制",
-- "details": {
-- "description": "基于条件的分支控制,只会选择一个分支执行",
-- "features": ["根据条件选择一个分支执行", "支持复杂的条件表达式", "可以设置默认分支"],
-- "scenarios": ["条件判断", "分支选择", "业务规则路由"]
-- },
-- "configSchema": {
-- "type": "object",
-- "properties": {
-- "code": {"type": "string", "title": "节点Code", "description": "工作流节点的Code"},
-- "name": {"type": "string", "title": "节点名称", "description": "工作流节点的显示名称"},
-- "description": {"type": "string", "title": "节点描述", "description": "工作流节点的详细描述"}
-- },
-- "required": ["code", "name"]
-- },
-- "uiSchema": {
-- "shape": "diamond",
-- "size": {"width": 50, "height": 50},
-- "style": {
-- "fill": "#fff7e6",
-- "stroke": "#faad14",
-- "strokeWidth": 2,
-- "icon": "fork",
-- "iconColor": "#faad14"
-- },
-- "ports": {
-- "groups": {
-- "in": {
-- "position": "left",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- },
-- "out": {
-- "position": "right",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- }
-- }
-- }
-- }
-- }', 1);
-- INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
-- VALUES
-- (7, NOW(),
-- 'system',
-- NOW(),
-- 'system', 'PARALLEL_GATEWAY', '并行网关', '并行分支控制', 'GATEWAY', '{
-- "code": "PARALLEL_GATEWAY",
-- "name": "并行网关",
-- "description": "并行分支控制",
-- "details": {
-- "description": "将流程分成多个并行分支同时执行,等待所有分支完成后合并",
-- "features": ["将流程分成多个并行分支", "等待所有分支完成后合并", "支持复杂的并行处理"],
-- "scenarios": ["并行审批", "多任务同时处理", "并行数据处理"]
-- },
-- "configSchema": {
-- "type": "object",
-- "properties": {
-- "code": {"type": "string", "title": "节点Code", "description": "工作流节点的Code"},
-- "name": {"type": "string", "title": "节点名称", "description": "工作流节点的显示名称"},
-- "description": {"type": "string", "title": "节点描述", "description": "工作流节点的详细描述"}
-- },
-- "required": ["code", "name"]
-- },
-- "uiSchema": {
-- "shape": "diamond",
-- "size": {"width": 50, "height": 50},
-- "style": {
-- "fill": "#fff7e6",
-- "stroke": "#faad14",
-- "strokeWidth": 2,
-- "icon": "branches",
-- "iconColor": "#faad14"
-- },
-- "ports": {
-- "groups": {
-- "in": {
-- "position": "left",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- },
-- "out": {
-- "position": "right",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- }
-- }
-- }
-- }
-- }', 1);
--
-- -- 容器节点
-- INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
-- VALUES
-- (8, NOW(),
-- 'system',
-- NOW(),
-- 'system', 'SUB_PROCESS', '子流程', '嵌入式子流程', 'CONTAINER', '{
-- "code": "SUB_PROCESS",
-- "name": "子流程",
-- "description": "嵌入式子流程",
-- "details": {
-- "description": "在当前流程中嵌入子流程,支持流程的模块化和复用",
-- "features": ["在当前流程中嵌入子流程", "重用流程片段", "支持事务处理", "独立的变量范围"],
-- "scenarios": ["流程复用", "模块化处理", "事务管理", "错误处理"]
-- },
-- "configSchema": {
-- "type": "object",
-- "properties": {
-- "code": {"type": "string", "title": "节点Code", "description": "工作流节点的Code"},
-- "name": {"type": "string", "title": "节点名称", "description": "工作流节点的显示名称"},
-- "description": {"type": "string", "title": "节点描述", "description": "工作流节点的详细描述"}
-- },
-- "required": ["code", "name"]
-- },
-- "uiSchema": {
-- "shape": "rect",
-- "size": {"width": 120, "height": 60},
-- "style": {
-- "fill": "#ffffff",
-- "stroke": "#1890ff",
-- "strokeWidth": 2,
-- "icon": "apartment",
-- "iconColor": "#1890ff"
-- },
-- "ports": {
-- "groups": {
-- "in": {
-- "position": "left",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- },
-- "out": {
-- "position": "right",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- }
-- }
-- }
-- }
-- }', 1);
-- -- 容器节点
-- INSERT INTO workflow_node_definition (id, create_time, create_by, update_time, update_by, type, name, description, category, graph_config, enabled)
-- VALUES
-- (9, NOW(),
-- 'system',
-- NOW(),
-- 'system', 'CALL_ACTIVITY', '调用活动', '外部流程调用', 'CONTAINER', '{
-- "code": "CALL_ACTIVITY",
-- "name": "调用活动",
-- "description": "外部流程调用",
-- "details": {
-- "description": "调用外部定义的流程,支持跨系统流程调用和参数传递",
-- "features": ["调用外部定义的流程", "支持跨系统流程调用", "传递和接收参数", "支持异步调用"],
-- "scenarios": ["跨系统流程集成", "公共流程复用", "分布式流程处理", "大型流程解耦"]
-- },
-- "configSchema": {
-- "type": "object",
-- "properties": {
-- "code": {"type": "string", "title": "节点Code", "description": "工作流节点的Code"},
-- "name": {"type": "string", "title": "节点名称", "description": "工作流节点的显示名称"},
-- "description": {"type": "string", "title": "节点描述", "description": "工作流节点的详细描述"}
-- },
-- "required": ["code", "name"]
-- },
-- "uiSchema": {
-- "shape": "rect",
-- "size": {"width": 120, "height": 60},
-- "style": {
-- "fill": "#ffffff",
-- "stroke": "#1890ff",
-- "strokeWidth": 2,
-- "icon": "api",
-- "iconColor": "#1890ff"
-- },
-- "ports": {
-- "groups": {
-- "in": {
-- "position": "left",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- },
-- "out": {
-- "position": "right",
-- "attrs": {
-- "circle": {
-- "r": 4,
-- "fill": "#ffffff",
-- "stroke": "#1890ff"
-- }
-- }
-- }
-- }
-- }
-- }
-- }', 1);