跳转到内容

工作流概述

@ventostack/workflow 是 VentoStack 平台层的工作流引擎模块,支持定义审批流程、启动流程实例、推进审批节点、处理审批任务等。可用于请假审批、报销审批、订单审核等各类业务流程场景。

import { createWorkflowModule } from '@ventostack/workflow';
const workflowModule = createWorkflowModule({
db,
jwt,
jwtSecret,
rbac,
});
// 注册路由
app.use(workflowModule.router);
// 初始化
await workflowModule.init();
interface WorkflowModuleDeps {
db: Database; // 数据库实例
jwt: JWTManager; // JWT 管理器
jwtSecret: string; // JWT 密钥
rbac?: RBAC; // 权限控制(可选)
}

所有路由需要认证,基于 RBAC 权限控制。

方法路径权限说明
POST/api/workflow/definitionsworkflow:definition:create创建流程定义
GET/api/workflow/definitionsworkflow:definition:list查询流程定义列表
GET/api/workflow/definitions/:idworkflow:definition:query查询流程定义详情
PUT/api/workflow/definitions/:idworkflow:definition:update更新流程定义
DELETE/api/workflow/definitions/:idworkflow:definition:delete删除流程定义
方法路径权限说明
PUT/api/workflow/definitions/:id/nodesworkflow:definition:update设置流程节点
GET/api/workflow/definitions/:id/nodesworkflow:definition:query获取流程节点列表
方法路径权限说明
POST/api/workflow/instancesworkflow:instance:create启动流程实例
GET/api/workflow/instances/:idworkflow:instance:query查询流程实例详情
方法路径权限说明
GET/api/workflow/tasksworkflow:task:list查询我的待办任务
PUT/api/workflow/tasks/:id/approveworkflow:task:approve审批通过
PUT/api/workflow/tasks/:id/rejectworkflow:task:reject驳回任务
POST /api/workflow/definitions
{
"name": "请假审批",
"code": "leave_approval",
"description": "员工请假审批流程"
}
// 响应
{ "id": "uuid" }
PUT /api/workflow/definitions/:id/nodes
{
"nodes": [
{ "name": "部门经理审批", "type": "approve", "assigneeType": "user", "assigneeId": "user-001", "sort": 1 },
{ "name": "HR 审批", "type": "approve", "assigneeType": "user", "assigneeId": "user-002", "sort": 2 },
{ "name": "审批完成通知", "type": "notify", "sort": 3 }
]
}

节点类型:

  • start — 开始节点(自动创建)
  • end — 结束节点(自动创建)
  • approve — 审批节点
  • notify — 通知节点
  • condition — 条件分支节点
POST /api/workflow/instances
{
"definitionId": "workflow-uuid",
"businessType": "leave", // 可选,关联业务类型
"businessId": "leave-001", // 可选,关联业务 ID
"variables": { "days": 3 } // 可选,流程变量
}
// 响应
{ "instanceId": "uuid" }
// 注意:发起人 ID 从当前登录用户自动获取
GET /api/workflow/tasks?page=1&pageSize=10&status=0
// status: 0=待处理, 1=已通过, 2=已驳回
// 审批通过
PUT /api/workflow/tasks/:id/approve
{ "comment": "同意" }
// 驳回
PUT /api/workflow/tasks/:id/reject
{ "comment": "材料不全,请补充" }

通过 workflowModule.services.workflow 访问服务:

const svc = workflowModule.services.workflow;
// 创建流程定义
const { id } = await svc.createDefinition({
name: '报销审批',
code: 'expense_approval',
description: '员工报销审批流程',
});
// 更新流程定义
await svc.updateDefinition(id, { name: '报销审批 v2', status: 1 });
// 设置节点
await svc.setNodes(id, [
{ name: '直属领导审批', type: 'approve', assigneeType: 'user', assigneeId: 'leader-001', sort: 1 },
{ name: '财务审批', type: 'approve', assigneeType: 'user', assigneeId: 'finance-001', sort: 2 },
]);
// 查询节点
const nodes = await svc.getNodes(id);
// 启动流程实例
const { instanceId } = await svc.startInstance({
definitionId: id,
initiatorId: 'user-001',
businessType: 'expense',
businessId: 'expense-001',
});
// 查询实例详情(含节点和任务)
const detail = await svc.getInstanceDetail(instanceId);
// 查询待办任务
const tasks = await svc.getMyTasks('user-001', { status: 0, page: 1, pageSize: 10 });
// 审批通过
await svc.approveTask(tasks.items[0].id, 'user-001', '同意');
// 驳回
await svc.rejectTask(tasks.items[0].id, 'user-001', '需修改');
字段类型说明
idvarchar(36)主键
namevarchar(128)流程名称
codevarchar(64)流程编码
versionint版本号,默认 1
descriptiontext描述(可空)
statusint状态:0=草稿, 1=启用, 2=停用
created_at / updated_attimestamp自动时间戳
字段类型说明
idvarchar(36)主键
definition_idvarchar(36)关联流程定义 ID
namevarchar(128)节点名称
typevarchar(32)节点类型:start / end / approve / notify / condition
assignee_typevarchar(32)审批人类型(可空)
assignee_idvarchar(36)审批人 ID(可空)
sortint排序号
configjson节点配置(可空)
created_at / updated_attimestamp自动时间戳
字段类型说明
idvarchar(36)主键
definition_idvarchar(36)关联流程定义 ID
business_typevarchar(64)业务类型(可空)
business_idvarchar(36)业务 ID(可空)
initiator_idvarchar(36)发起人 ID
current_node_idvarchar(36)当前节点 ID(可空)
statusint状态:0=运行中, 1=已完成, 2=已驳回, 3=已取消
variablesjson流程变量(可空)
created_at / updated_attimestamp自动时间戳
字段类型说明
idvarchar(36)主键
instance_idvarchar(36)关联实例 ID
node_idvarchar(36)关联节点 ID
assignee_idvarchar(36)审批人 ID
actionvarchar(32)操作类型:approve / reject(可空)
commenttext审批意见(可空)
statusint状态:0=待处理, 1=已通过, 2=已驳回
acted_attimestamp操作时间(可空)
created_at / updated_attimestamp自动时间戳