feat: 更新sql文件 添加工作流样式接口

This commit is contained in:
lihao05
2025-10-24 10:13:01 +08:00
parent 0ce0ce1262
commit 73e588ac60
3 changed files with 192 additions and 99 deletions

View File

@@ -93,6 +93,37 @@ public class WorkflowService extends ServiceImpl<WorkflowMapper, Workflow> {
return changeWorkflowToDTO(workflow2);
}
/**
* 获取当前用户可访问的工作流详情
*
* @param uuid 工作流唯一标识
* @return 工作流详情
*/
public WorkflowResp getDetail(String uuid) {
Workflow workflow = PrivilegeUtil.checkAndGetByUuid(uuid, this.query(), ErrorEnum.A_WF_NOT_FOUND);
return changeWorkflowToDTO(workflow);
}
/**
* 获取公开工作流详情
*
* @param uuid 工作流唯一标识
* @return 工作流详情
*/
public WorkflowResp getPublicDetail(String uuid) {
Workflow workflow = ChainWrappers.lambdaQueryChain(baseMapper)
.eq(Workflow::getUuid, uuid)
.eq(Workflow::getIsDeleted, false)
.eq(Workflow::getIsPublic, true)
.eq(Workflow::getIsEnable, true)
.last("limit 1")
.one();
if (null == workflow) {
throw new BaseException(ErrorEnum.A_WF_NOT_FOUND.getInfo());
}
return changeWorkflowToDTO(workflow);
}
public Workflow getByUuid(String uuid) {
return ChainWrappers.lambdaQueryChain(baseMapper)
.eq(Workflow::getUuid, uuid)
@@ -149,7 +180,24 @@ public class WorkflowService extends ServiceImpl<WorkflowMapper, Workflow> {
userIds.add(source.getUserId());
return target;
});
// fillUserInfos(userIds, result.getRecords());
return result;
}
public Page<WorkflowResp> search(String keyword, Integer currentPage, Integer pageSize) {
Page<Workflow> page = ChainWrappers.lambdaQueryChain(baseMapper)
.eq(Workflow::getIsDeleted, false)
.eq(Workflow::getIsEnable, true)
.like(StringUtils.isNotBlank(keyword), Workflow::getTitle, keyword)
.orderByDesc(Workflow::getUpdateTime)
.page(new Page<>(currentPage, pageSize));
Page<WorkflowResp> result = new Page<>();
List<Long> userIds = new ArrayList<>();
MPPageUtil.convertToPage(page, result, WorkflowResp.class, (source, target) -> {
fillNodesAndEdges(target);
userIds.add(source.getUserId());
return target;
});
return result;
}

View File

@@ -83,6 +83,17 @@ public class WorkflowController {
return R.ok(workflowService.search(keyword, isPublic, null, currentPage, pageSize));
}
/**
* 获取当前用户可访问的工作流详情
*
* @param uuid 工作流唯一标识
* @return 工作流详情
*/
@GetMapping("/{uuid}")
public R<WorkflowResp> getDetail(@PathVariable String uuid) {
return R.ok(workflowService.getDetail(uuid));
}
/**
* 搜索公开工作流
*
@@ -98,6 +109,33 @@ public class WorkflowController {
return R.ok(workflowService.searchPublic(keyword, currentPage, pageSize));
}
/**
* 搜索公开工作流
*
* @param keyword 搜索关键词
* @param currentPage 当前页数
* @param pageSize 每页数量
* @return 工作流列表
*/
@GetMapping("/search")
public R<Page<WorkflowResp>> search(@RequestParam(defaultValue = "") String keyword,
@NotNull @Min(1) Integer currentPage,
@NotNull @Min(10) Integer pageSize) {
return R.ok(workflowService.search(keyword, currentPage, pageSize));
}
/**
* 获取公开工作流详情
*
* @param uuid 工作流唯一标识
* @return 工作流详情
*/
@GetMapping("/public/{uuid}")
public R<WorkflowResp> getPublicDetail(@PathVariable String uuid) {
return R.ok(workflowService.getPublicDetail(uuid));
}
@GetMapping("/public/operators")
public R<List<Map<String, String>>> searchPublic() {
List<Map<String, String>> result = new ArrayList<>();

View File

@@ -1,115 +1,114 @@
CREATE TABLE t_workflow
CREATE TABLE `t_workflow`
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(32) NOT NULL DEFAULT '',
title VARCHAR(100) NOT NULL DEFAULT '',
remark TEXT NOT NULL DEFAULT '',
user_id BIGINT NOT NULL DEFAULT 0,
is_public TINYINT(1) NOT NULL DEFAULT 0,
is_enable TINYINT(1) NOT NULL DEFAULT 1,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted TINYINT(1) NOT NULL DEFAULT 0
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT ='工作流定义(用户定义的工作流)| Workflow Definition';
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`uuid` varchar(32) NOT NULL DEFAULT 'uuid',
`title` varchar(100) NOT NULL DEFAULT '标题',
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户ID',
`is_public` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否公开',
`is_enable` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` text COMMENT '备注',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除 默认0不删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8mb4 COMMENT='工作流定义(用户定义的工作流)| Workflow Definition';
CREATE TABLE t_workflow_node
CREATE TABLE `t_workflow_node`
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(32) NOT NULL DEFAULT '',
workflow_id BIGINT NOT NULL DEFAULT 0,
workflow_component_id BIGINT NOT NULL DEFAULT 0,
user_id BIGINT NOT NULL DEFAULT 0,
title VARCHAR(100) NOT NULL DEFAULT '',
remark VARCHAR(500) NOT NULL DEFAULT '',
input_config JSON NOT NULL DEFAULT ('{}'),
node_config JSON NOT NULL DEFAULT ('{}'),
position_x DOUBLE NOT NULL DEFAULT 0,
position_y DOUBLE NOT NULL DEFAULT 0,
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
INDEX idx_workflow_node_workflow_id (workflow_id)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT ='工作流定义的节点 | Node of Workflow Definition';
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '节点唯一标识',
`workflow_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属工作流定义 id',
`workflow_component_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '引用的组件 id',
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建人',
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '节点标题',
`remark` varchar(500) NOT NULL DEFAULT '' COMMENT '节点备注',
`input_config` json NOT NULL COMMENT '输入参数模板,例:{"params":[{"name":"user_define_param01","type":"string"}]}',
`node_config` json DEFAULT NULL COMMENT '节点执行配置,例:{"params":[{"prompt":"Summarize the following content:{user_define_param01}"}]}',
`position_x` double NOT NULL DEFAULT '0' COMMENT '画布 x 坐标',
`position_y` double NOT NULL DEFAULT '0' COMMENT '画布 y 坐标',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除0 正常1 已删',
PRIMARY KEY (`id`),
KEY `idx_workflow_node_workflow_id` (`workflow_id`)
) ENGINE=InnoDB AUTO_INCREMENT=269 DEFAULT CHARSET=utf8mb4 COMMENT='工作流定义的节点 | Node of Workflow Definition';
CREATE TABLE t_workflow_edge
CREATE TABLE `t_workflow_runtime_node`
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(32) NOT NULL DEFAULT '',
workflow_id BIGINT NOT NULL DEFAULT 0,
source_node_uuid VARCHAR(32) NOT NULL DEFAULT '',
source_handle VARCHAR(32) NOT NULL DEFAULT '',
target_node_uuid VARCHAR(32) NOT NULL DEFAULT '',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
INDEX idx_workflow_edge_workflow_id (workflow_id)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '节点运行实例唯一标识',
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建人',
`workflow_runtime_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属运行实例 id',
`node_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '对应工作流定义里的节点 id',
`input` json DEFAULT NULL COMMENT '节点本次输入数据',
`output` json DEFAULT NULL COMMENT '节点本次输出数据',
`status` smallint(6) NOT NULL DEFAULT '1' COMMENT '节点执行状态1 进行中2 失败3 成功',
`status_remark` varchar(250) NOT NULL DEFAULT '' COMMENT '状态补充说明,如失败堆栈',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除0 正常1 已删',
PRIMARY KEY (`id`),
KEY `idx_runtime_node_runtime_id` (`workflow_runtime_id`),
KEY `idx_runtime_node_node_id` (`node_id`)
) ENGINE=InnoDB AUTO_INCREMENT=805 DEFAULT CHARSET=utf8mb4 COMMENT='工作流实例(运行时)- 节点 | Workflow Runtime Node';
CREATE TABLE t_workflow_runtime
CREATE TABLE `t_workflow_edge`
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(32) NOT NULL DEFAULT '',
user_id BIGINT NOT NULL DEFAULT 0,
workflow_id BIGINT NOT NULL DEFAULT 0,
input JSON NOT NULL DEFAULT ('{}'),
output JSON NOT NULL DEFAULT ('{}'),
status SMALLINT NOT NULL DEFAULT 1 COMMENT '执行状态1就绪2执行中3成功4失败',
status_remark VARCHAR(250) NOT NULL DEFAULT '' COMMENT '状态备注',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
INDEX idx_workflow_runtime_workflow_id (workflow_id),
INDEX idx_workflow_runtime_user_id (user_id)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT ='工作流实例(运行时)| Workflow Runtime';
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '边唯一标识',
`workflow_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '所属工作流定义 id',
`source_node_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '起始节点 uuid',
`source_handle` varchar(32) NOT NULL DEFAULT '' COMMENT '起始锚点标识',
`target_node_uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '目标节点 uuid',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除0 正常1 已删',
PRIMARY KEY (`id`),
KEY `idx_workflow_edge_workflow_id` (`workflow_id`)
) ENGINE=InnoDB AUTO_INCREMENT=199 DEFAULT CHARSET=utf8mb4 COMMENT='工作流定义的边 | Edge of Workflow Definition';
CREATE TABLE t_workflow_runtime_node
CREATE TABLE `t_workflow_component`
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(32) NOT NULL DEFAULT '',
user_id BIGINT NOT NULL DEFAULT 0,
workflow_runtime_id BIGINT NOT NULL DEFAULT 0,
node_id BIGINT NOT NULL DEFAULT 0,
input JSON NOT NULL DEFAULT ('{}'),
output JSON NOT NULL DEFAULT ('{}'),
status SMALLINT NOT NULL DEFAULT 1 COMMENT '执行状态1进行中2失败3成功',
status_remark VARCHAR(250) NOT NULL DEFAULT '' COMMENT '状态备注',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
INDEX idx_runtime_node_runtime_id (workflow_runtime_id),
INDEX idx_runtime_node_node_id (node_id)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT ='工作流实例(运行时)- 节点 | Workflow Runtime Node';
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`uuid` varchar(32) NOT NULL DEFAULT '',
`name` varchar(32) NOT NULL DEFAULT '',
`title` varchar(100) NOT NULL DEFAULT '',
`remark` text NOT NULL,
`display_order` int(11) NOT NULL DEFAULT '0',
`is_enable` tinyint(1) NOT NULL DEFAULT '0',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`is_deleted` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `idx_display_order` (`display_order`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COMMENT='工作流组件库 | Workflow Component';
CREATE TABLE t_workflow_component
CREATE TABLE `t_workflow_runtime`
(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
uuid VARCHAR(32) DEFAULT '' NOT NULL,
name VARCHAR(32) DEFAULT '' NOT NULL,
title VARCHAR(100) DEFAULT '' NOT NULL,
remark TEXT NOT NULL,
display_order INT DEFAULT 0 NOT NULL,
is_enable TINYINT(1) DEFAULT 0 NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
is_deleted TINYINT(1) DEFAULT 0 NOT NULL,
INDEX idx_display_order (display_order)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COMMENT '工作流组件库 | Workflow Component';
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`uuid` varchar(32) NOT NULL DEFAULT '' COMMENT '运行实例唯一标识',
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '启动人',
`workflow_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '对应工作流定义 id',
`input` json DEFAULT NULL COMMENT '运行输入,例:{"userInput01":"text01","userInput02":true,"userInput03":10,"userInput04":["selectedA","selectedB"],"userInput05":["https://a.com/a.xlsx","https://a.com/b.png"]}',
`output` json DEFAULT NULL COMMENT '运行输出,成功或失败的结果',
`status` smallint(6) NOT NULL DEFAULT '1' COMMENT '执行状态1 就绪2 执行中3 成功4 失败',
`status_remark` varchar(250) NOT NULL DEFAULT '' COMMENT '状态补充说明,如失败原因',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除0 正常1 已删',
PRIMARY KEY (`id`),
KEY `idx_workflow_runtime_workflow_id` (`workflow_id`),
KEY `idx_workflow_runtime_user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=297 DEFAULT CHARSET=utf8mb4 COMMENT='工作流实例(运行时)| Workflow Runtime';
-- workflow
@@ -157,6 +156,14 @@ values (replace(uuid(), '-', ''), 'HttpRequest', 'Http请求',
'通过Http协议发送请求可将其他组件的输出作为参数也可设置常量作为参数。', 10, false);
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1976160997656043521, '流程管理', 0, 1, 'flow', '', null, 1, 0, 'M', '0', '0', null, 'ph:user-fill', null, null, '2025-10-09 13:41:12', 1, '2025-10-20 20:59:25', '');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (1976161221409579010, '工作流编排', 1976160997656043521, 0, 'workflow', 'workflow/index', null, 1, 0, 'C', '0', '0', null, 'ph:user-fill', null, null, '2025-10-09 13:42:05', 1, '2025-10-20 20:59:16', '');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache,
menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by,
update_time, remark)
VALUES (1976160997656043521, '流程管理', 0, 1, 'flow', '', null, 1, 0, 'M', '0', '0', null, 'ph:user-fill', null, null,
'2025-10-09 13:41:12', 1, '2025-10-20 20:59:25', '');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache,
menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by,
update_time, remark)
VALUES (1976161221409579010, '工作流编排', 1976160997656043521, 0, 'workflow', 'workflow/index', null, 1, 0, 'C', '0',
'0', null, 'ph:user-fill', null, null, '2025-10-09 13:42:05', 1, '2025-10-20 20:59:16', '');