Skip to content

工作流模块 ​

概述 ​

工作流模块提供完整的流程引擎能力,支持可视化流程设计、多种节点类型、审批人解析、条件分支、并行处理、子流程、超时处理等功能。

模块路径:backend-fastapi/core/workflow/

API 前缀:/api/core/workflow

数据模型 ​

WorkflowDefinition(流程定义) ​

python
class WorkflowDefinition(BaseModel):
    __tablename__ = "core_workflow_definition"

    application_id: str     # 所属应用 ID
    name: str               # 流程名称
    code: str               # 流程编码
    workflow_type: str      # 流程类型
    icon: str               # 图标
    icon_bg_color: str      # 图标背景色
    category: str           # 分类
    description: str        # 描述
    status: str             # 状态
    version: int            # 版本号
    form_code: str          # 关联表单编码
    form_name: str          # 关联表单名称
    flow_definition: dict   # 流程定义(JSONB)

WorkflowInstance(流程实例) ​

python
class WorkflowInstance(BaseModel):
    __tablename__ = "core_workflow_instance"

    workflow_id: str        # 流程定义 ID
    instance_no: str        # 实例编号
    title: str              # 流程标题
    status: str             # 状态
    initiator_id: str       # 发起人 ID
    form_code: str          # 表单编码
    form_data_id: str       # 表单数据 ID
    current_node_id: str    # 当前节点 ID
    current_node_name: str  # 当前节点名称
    started_at: datetime    # 开始时间
    completed_at: datetime  # 完成时间
    parallel_branch_status: dict  # 并行分支状态
    parent_instance_id: str # 父实例 ID(子流程)
    parent_node_id: str     # 父节点 ID
    is_subflow: bool        # 是否子流程
    delay_node_id: str      # 延时节点 ID
    delay_until: datetime   # 延时到期时间

WorkflowTask(任务) ​

python
class WorkflowTask(BaseModel):
    __tablename__ = "core_workflow_task"

    instance_id: str        # 实例 ID
    node_id: str            # 节点 ID
    node_name: str          # 节点名称
    task_type: str          # 任务类型
    status: str             # 状态
    assignee_id: str        # 处理人 ID
    comment: str            # 处理意见
    handled_at: datetime    # 处理时间
    transferred_to_id: str  # 转交目标人
    parent_task_id: str     # 父任务 ID(加签)
    sign_type: str          # 加签类型
    timeout_at: datetime    # 超时时间
    timeout_action: str     # 超时动作
    timeout_notified: bool  # 是否已通知超时

WorkflowLog(操作日志) ​

python
class WorkflowLog(BaseModel):
    __tablename__ = "core_workflow_log"

    instance_id: str        # 实例 ID
    node_id: str            # 节点 ID
    node_name: str          # 节点名称
    action: str             # 操作类型
    operator_id: str        # 操作人 ID
    comment: str            # 操作意见
    extra_data: dict        # 额外数据

状态枚举 ​

流程定义状态 ​

值说明
draft草稿
published已发布
disabled已停用

实例状态 ​

值说明
pending进行中
approved已通过
rejected已拒绝
canceled已取消

任务类型 ​

值说明
approval审批
handle办理
copy抄送
revise修订

任务状态 ​

值说明
pending待处理
waiting等待中
approved已同意
rejected已拒绝
returned已驳回
transferred已转交
delegated已委托
handled已办理
canceled已取消
read已阅

流程引擎 ​

WorkflowEngine ​

核心引擎类,提供以下方法:

方法说明
start(db, definition, form_data, user_id)发起流程
complete_task(db, task, action, comment)完成任务
transfer_task(db, task, to_user_id)转交任务
restart_instance(db, instance)重新提交(驳回后)

内部方法 ​

方法说明
_advance_to_next(ctx, node)推进到下一节点
_end_instance(ctx, status)结束实例
_handle_return(ctx, task, return_to)处理驳回
_resume_parent_after_subflow(ctx)子流程完成后恢复父流程

节点处理器 ​

处理器节点类型说明
ApprovalHandlerapproval审批节点
HandleHandlerhandle办理节点
CopyHandlercopy抄送节点
ConditionHandlercondition条件分支
ParallelHandlerparallel并行分支
DelayNodeHandlerdelay延时节点
NotifyHandlernotify通知节点
ServiceHandlerserviceHTTP 服务调用
SubflowHandlersubflow子流程

审批人解析器 ​

AssigneeResolver 支持以下审批人类型:

类型说明
user指定用户
role指定角色
department指定部门
superior直属上级
manager部门负责人
initiator发起人
form_field表单字段

条件求值器 ​

ConditionEvaluator 支持以下操作符:

操作符说明
eq等于
ne不等于
gt大于
gte大于等于
lt小于
lte小于等于
contains包含
not_contains不包含
in在列表中
not_in不在列表中
empty为空
not_empty不为空

多人审批模式 ​

模式说明
any任一人通过即可
parallel所有人同时审批
sequential依次审批

服务层 ​

WorkflowDefinitionService ​

方法说明
get_list(db, page, page_size, filters)获取流程列表
get_by_id(db, id)获取流程详情
get_by_code(db, code)根据编码获取
create(db, data)创建流程
update(db, id, data)更新流程
delete(db, id)删除流程
publish(db, id)发布流程
disable(db, id)停用流程
copy(db, id)复制流程
get_categories(db)获取分类列表

WorkflowInstanceService ​

方法说明
start(db, definition_id, form_data, user_id)发起流程
get_list(db, page, page_size, filters)获取实例列表
get_by_id(db, id)获取实例详情
cancel(db, id, user_id)取消流程
urge(db, id, user_id)催办

WorkflowTaskService ​

方法说明
get_pending_tasks(db, user_id, page, page_size)获取待办任务
get_pending_count(db, user_id)获取待办数量
get_handled_tasks(db, user_id, page, page_size)获取已办任务
get_copy_tasks(db, user_id, page, page_size)获取抄送任务
approve(db, task_id, action, comment)审批
handle(db, task_id, comment)办理
transfer(db, task_id, to_user_id)转交
delegate(db, task_id, to_user_id)委托
add_sign(db, task_id, sign_type, to_user_ids)加签
mark_read(db, task_id)标记已阅
revise(db, task_id, form_data)修订

API 接口 ​

流程定义 ​

方法路径说明
GET/list获取流程列表
GET/categories获取分类
GET/available-forms获取可用表单
GET/by-form/{form_code}根据表单获取流程
GET/code/{code}根据编码获取
GET/{id}获取详情
POST/创建流程
PUT/{id}更新流程
DELETE/{id}删除流程
DELETE/batch/delete批量删除
POST/{id}/publish发布
POST/{id}/disable停用
POST/{id}/copy复制

流程实例 ​

方法路径说明
POST/instance/start发起流程
GET/instance/list获取实例列表
GET/instance/my-initiated我发起的
GET/instance/{id}获取详情
POST/instance/{id}/cancel取消
POST/instance/{id}/urge催办
GET/instance/{id}/logs获取日志
GET/instance/{id}/pending-tasks获取待办任务
GET/instance/{id}/form-data获取表单数据
GET/instance/{id}/progress获取流程进度

任务 ​

方法路径说明
GET/task/pending我的待办
GET/task/pending/count待办数量
GET/task/handled我的已办
GET/task/cc抄送我的
GET/task/{id}任务详情
POST/task/{id}/approve审批
POST/task/{id}/handle办理
POST/task/{id}/transfer转交
POST/task/{id}/delegate委托
POST/task/{id}/add-sign加签
POST/task/{id}/read标记已阅
POST/task/{id}/revise修订

管理员 ​

方法路径说明
POST/admin/check-timeouts检查超时任务
GET/admin/timeout-tasks获取超时任务

流程定义结构 ​

流程定义采用树形 JSON 结构:

json
{
  "id": "start_1",
  "type": "start",
  "name": "开始",
  "children": [
    {
      "id": "approval_1",
      "type": "approval",
      "name": "部门审批",
      "config": {
        "assignees": [...],
        "multiApproval": "any",
        "emptyAssignee": "skip",
        "timeout": {
          "enabled": true,
          "duration": 24,
          "unit": "hour",
          "action": "auto_approve"
        },
        "formPermissions": [...]
      },
      "children": [...]
    }
  ]
}

节点配置 ​

字段说明
assignees审批人配置
multiApproval多人审批模式
emptyAssignee无审批人时处理(skip/admin)
timeout超时配置
formPermissions表单字段权限
conditions条件配置(条件节点)
duration/unit延时配置(延时节点)

请求/响应示例 ​

发起流程 ​

请求:

json
POST /api/core/workflow/instance/start
{
  "workflow_id": "wf001",
  "title": "请假申请-张三",
  "form_data": {
    "leave_type": "annual",
    "start_date": "2024-01-15",
    "end_date": "2024-01-17",
    "reason": "年假"
  }
}

审批任务 ​

请求:

json
POST /api/core/workflow/task/{task_id}/approve
{
  "action": "approve",
  "comment": "同意",
  "form_data": null
}

获取流程进度 ​

响应:

json
{
  "nodes": [
    {
      "id": "start_1",
      "name": "开始",
      "status": "completed",
      "handlers": [
        {"user_id": "u001", "name": "张三", "handled_at": "..."}
      ]
    },
    {
      "id": "approval_1",
      "name": "部门审批",
      "status": "active",
      "handlers": [
        {"user_id": "u002", "name": "李四", "status": "pending"}
      ]
    }
  ],
  "returns": []
}

与其他模块的关系 ​

  • 表单模块:流程关联表单(form_code),表单数据存储在表单数据表
  • 用户模块:审批人解析依赖用户、部门、角色信息
  • 通知模块:任务创建/完成时发送通知
  • 调度模块:延时节点和超时处理依赖定时任务

Released under the MIT License.