【7步上手】2025企业级工作流神器think-wf从安装到实战全指南

【7步上手】2025企业级工作流神器think-wf从安装到实战全指南

【免费下载链接】think-wf think-wf 工作流工作流组件。think-orm结合Ingenious工作流引擎一个服务组件,为企业提供一套高效、灵活的工作流解决方案。 【免费下载链接】think-wf 项目地址: https://gitcode.com/motion-code/think-wf

你是否还在为企业流程审批效率低下而烦恼?还在为工作流引擎集成复杂而头疼?本文将带你7步掌握think-wf工作流组件的安装与使用,从环境准备到流程设计、实例运行全流程实战,让你1小时内搭建起企业级工作流系统。

读完本文你将获得:

  • 从零开始搭建think-wf工作流环境的完整步骤
  • 流程定义、任务分配、代理授权的核心API实战
  • 常见问题解决方案与性能优化技巧
  • 企业级应用场景的最佳实践案例

1. think-wf简介:企业级工作流解决方案

think-wf是基于ThinkORM和Ingenious工作流引擎v2的服务组件,专为企业提供高效、灵活的工作流解决方案。它采用现代化的架构设计,既满足简单的审批流程需求,又能支撑复杂的业务流程编排。

1.1 核心优势

特性说明企业价值
ThinkORM集成无缝对接ThinkORM,简化数据库操作降低开发门槛,提高开发效率
丰富API接口提供完整的流程管理API满足多样化业务场景需求
Ingenious v2引擎强大的流程引擎支持复杂流转确保流程稳定性和高效执行
模块化设计分层架构,松耦合设计便于扩展和维护
完善的权限控制支持委托代理、权限细分满足企业级安全需求

1.2 技术架构

mermaid

2. 环境准备与安装

2.1 环境要求

think-wf对运行环境有以下要求:

环境版本要求备注
PHP^8.1推荐PHP 8.2以获得最佳性能
MySQL5.7+需支持JSON数据类型
Composer2.0+用于依赖管理
madong/ingenious^2.0工作流引擎核心依赖

2.2 安装步骤

步骤1:克隆代码仓库
git clone https://gitcode.com/motion-code/think-wf.git
cd think-wf
步骤2:安装依赖

使用Composer安装项目依赖:

composer install

注意:国内用户如果遇到安装缓慢的问题,可以配置Composer镜像:

composer config -g repo.packagist composer https://packagist.phpcomposer.com
步骤3:导入数据库

think-wf提供了完整的数据库脚本,执行以下命令导入:

# 使用mysql命令行导入
mysql -u用户名 -p密码 数据库名 < install.sql

# 或者使用数据库管理工具导入install.sql文件

数据库脚本会创建以下主要表:

mermaid

3. 快速入门:第一个工作流

下面通过一个请假审批流程的例子,快速了解think-wf的使用方法。

3.1 流程定义

首先,我们需要定义一个请假审批流程。流程定义包含流程的基本信息、节点信息、流转规则等。

use madong\think\wf\services\ProcessDefineService;

// 实例化流程定义服务
$processDefineService = new ProcessDefineService();

// 定义流程基本信息
$processData = [
    'type_id' => 249854145362927619, // 人事分类ID
    'name' => 'leave_approval',
    'display_name' => '请假审批流程',
    'description' => '员工请假审批流程',
    'enabled' => 1,
    'is_active' => 1,
    'version' => 1.0,
    // 流程定义内容,JSON格式
    'content' => json_encode([
        'nodes' => [
            [
                'id' => 'start',
                'name' => '开始',
                'type' => 'startEvent',
                'nextNode' => 'apply'
            ],
            [
                'id' => 'apply',
                'name' => '填写请假单',
                'type' => 'userTask',
                'assigneeType' => 'initiator', // 发起人
                'nextNode' => 'manager_approve'
            ],
            [
                'id' => 'manager_approve',
                'name' => '部门主管审批',
                'type' => 'userTask',
                'assigneeType' => 'role', // 按角色分配
                'roleId' => 'manager', // 主管角色ID
                'nextNode' => 'hr_approve'
            ],
            [
                'id' => 'hr_approve',
                'name' => '人事审批',
                'type' => 'userTask',
                'assigneeType' => 'role', // 按角色分配
                'roleId' => 'hr', // 人事角色ID
                'nextNode' => 'end'
            ],
            [
                'id' => 'end',
                'name' => '结束',
                'type' => 'endEvent'
            ]
        ]
    ])
];

// 创建流程定义
$processDefine = $processDefineService->create($processData);

echo "流程定义创建成功,ID: " . $processDefine->id;

3.2 发起流程实例

流程定义创建完成后,就可以发起流程实例了:

use madong\think\wf\services\ProcessInstanceService;

// 实例化流程实例服务
$processInstanceService = new ProcessInstanceService();

// 发起流程实例
$instanceData = [
    'process_define_id' => $processDefine->id, // 流程定义ID
    'business_no' => 'LEAVE' . date('YmdHis'), // 业务编号
    'operator' => 10001, // 发起人ID
    'variable' => json_encode([
        'leave_type' => 'annual', // 年假
        'start_date' => '2025-10-01',
        'end_date' => '2025-10-07',
        'days' => 7,
        'reason' => '年度休假'
    ]),
    'expire_time' => strtotime('+7 days') // 期望完成时间
];

$instance = $processInstanceService->create($instanceData);

echo "流程实例创建成功,ID: " . $instance->id;

3.3 处理任务

流程实例发起后,会自动创建第一个任务(填写请假单),接下来我们需要处理这个任务:

use madong\think\wf\services\ProcessTaskService;

// 实例化任务服务
$taskService = new ProcessTaskService();

// 查询用户的待办任务
$tasks = $taskService->getUserTasks(10001); // 用户ID

// 假设第一个任务是我们要处理的请假单任务
$task = $tasks[0];

// 完成任务
$taskData = [
    'id' => $task->id,
    'task_state' => 20, // 已完成
    'operator' => 10001, // 当前处理人
    'finish_time' => time(),
    'variable' => json_encode([
        'approval_result' => 'agree', // 同意
        'comment' => '同意请假'
    ])
];

$taskService->complete($taskData);

echo "任务处理成功";

4. 核心功能详解

4.1 流程定义管理

流程定义是工作流的基础,它定义了流程的节点、流转规则等。think-wf提供了ProcessDefineService来管理流程定义。

4.1.1 流程定义的CRUD操作
// 创建流程定义(已在快速入门中展示)

// 查询流程定义
$processDefine = $processDefineService->getById($processDefineId);

// 更新流程定义
$updateData = [
    'display_name' => '员工请假审批流程V2',
    'description' => '更新后的员工请假审批流程,增加了总监审批节点'
];
$processDefineService->update($processDefineId, $updateData);

// 禁用流程定义
$processDefineService->disable($processDefineId);

// 启用流程定义
$processDefineService->enable($processDefineId);
4.1.2 流程版本管理

think-wf支持流程定义的版本管理,当业务需求变化时,可以创建新版本的流程定义,而不影响旧版本的运行中实例。

// 创建新版本流程定义
$newVersionData = [
    'base_on_id' => $processDefineId, // 基于哪个版本创建
    'version' => 2.0,
    'content' => json_encode([/* 新的流程定义内容 */])
];
$newVersion = $processDefineService->createNewVersion($newVersionData);

// 查询流程的所有版本
$versions = $processDefineService->getVersions($processDefine->name);

// 将新版本设为活跃版本
$processDefineService->setActiveVersion($newVersion->id);

4.2 流程实例管理

流程实例是流程定义的具体执行实例,ProcessInstanceService提供了对流程实例的管理功能。

4.2.1 流程实例的生命周期

mermaid

4.2.2 流程实例操作
// 创建流程实例(已在快速入门中展示)

// 查询流程实例详情
$instance = $processInstanceService->getById($instanceId);

// 撤回流程实例
$processInstanceService->withdraw($instanceId, $userId);

// 中止流程实例
$processInstanceService->terminate($instanceId, $userId, '因业务变更,中止此流程');

// 挂起流程实例
$processInstanceService->suspend($instanceId);

// 恢复流程实例
$processInstanceService->resume($instanceId);

4.3 任务管理

任务是流程实例的执行单元,用户通过处理任务推动流程前进。ProcessTaskService提供了任务管理功能。

4.3.1 任务查询与处理
// 查询用户待办任务
$todoTasks = $taskService->getUserTasks($userId);

// 查询用户已办任务
$doneTasks = $taskService->getUserCompletedTasks($userId);

// 认领任务
$taskService->claim($taskId, $userId);

// 委托任务
$taskService->delegate($taskId, $userId, $delegateUserId, '出差期间委托处理');

// 转办任务
$taskService->transfer($taskId, $userId, $targetUserId);

// 完成任务(已在快速入门中展示)

4.4 委托代理

在实际工作中,用户可能因出差、休假等原因无法处理任务,这时可以通过委托代理功能将任务委托给他人处理。

use madong\think\wf\services\ProcessSurrogateService;

$surrogateService = new ProcessSurrogateService();

// 设置委托
$surrogateData = [
    'process_define_id' => $processDefineId, // 可选,特定流程或所有流程
    'operator' => $userId, // 授权人
    'surrogate' => $delegateUserId, // 代理人
    'start_time' => strtotime('2025-10-01'), // 开始时间
    'end_time' => strtotime('2025-10-07'), // 结束时间
    'enabled' => 1 // 启用
];

$surrogateService->create($surrogateData);

// 取消委托
$surrogateService->disable($surrogateId);

5. 高级特性

5.1 流程变量

流程变量是工作流中的重要概念,用于存储流程运行过程中的数据,并影响流程的流转。

// 设置流程变量
$processInstanceService->setVariable($instanceId, 'manager_approval', 'agree');

// 获取流程变量
$variable = $processInstanceService->getVariable($instanceId, 'manager_approval');

// 获取所有流程变量
$variables = $processInstanceService->getVariables($instanceId);

5.2 条件分支

think-wf支持基于条件的流程分支,实现复杂的业务逻辑。

{
  "nodes": [
    {
      "id": "start",
      "name": "开始",
      "type": "startEvent",
      "nextNode": "approve"
    },
    {
      "id": "approve",
      "name": "经理审批",
      "type": "userTask",
      "assigneeType": "role",
      "roleId": "manager",
      "nextNode": "condition_gateway"
    },
    {
      "id": "condition_gateway",
      "name": "条件网关",
      "type": "exclusiveGateway",
      "conditions": [
        {
          "expression": "${leave_days <= 3}",
          "nextNode": "hr_approve"
        },
        {
          "expression": "${leave_days > 3}",
          "nextNode": "director_approve"
        }
      ]
    },
    // 其他节点...
  ]
}

5.3 会签

会签是指多个用户共同审批一个任务,可以是串行会签或并行会签。

{
  "id": "meeting_approval",
  "name": "会议审批",
  "type": "userTask",
  "assigneeType": "role",
  "roleId": "department_members",
  "perform_type": 1, // 1:会签参与
  "countersignRule": {
    "type": "percentage", // 按比例
    "value": 0.6, // 60%同意则通过
    "minApprovers": 3 // 至少3人审批
  },
  "nextNode": "ceo_approval"
}

6. 常见问题与解决方案

6.1 环境配置问题

Q: 安装依赖时提示"madong/ingenious ^2.0 not found"

A: 确保你的Composer配置了正确的仓库地址,可以通过以下命令添加:

composer config repositories.ingenious vcs https://gitcode.com/motion-code/ingenious.git

然后重新执行composer install

6.2 流程运行问题

Q: 流程实例启动后没有生成任务

A: 可能的原因有:

  1. 流程定义的content格式不正确,检查JSON格式和节点定义
  2. 节点的assigneeType配置错误,导致无法分配任务
  3. 数据库权限不足,无法写入任务数据

可以通过以下方式排查:

// 开启调试模式
$processInstanceService->setDebug(true);
// 尝试启动流程,获取调试信息
$debugInfo = $processInstanceService->create($instanceData);
print_r($debugInfo);

6.3 性能问题

Q: 流程实例数量较多时,查询待办任务变慢

A: 可以通过以下方式优化:

  1. 确保相关表的索引正确创建,特别是idx_process_task_operator等索引
  2. 使用分页查询减少数据量
  3. 考虑添加缓存层,缓存用户的待办任务列表
// 分页查询待办任务
$page = 1;
$size = 20;
$tasks = $taskService->getUserTasksByPage($userId, $page, $size);

7. 企业级应用最佳实践

7.1 流程设计规范

  1. 命名规范:流程名称和节点名称应清晰明了,反映其业务含义
  2. 版本管理:每次流程变更创建新版本,保留历史版本以便回溯
  3. 权限控制:严格控制流程设计和管理权限,建议采用RBAC模型
  4. 日志记录:对流程的创建、修改、删除等操作保留详细日志

7.2 高可用部署

对于企业级应用,建议采用以下部署架构:

mermaid

7.3 与业务系统集成

think-wf可以与各种业务系统集成,以下是一个与CRM系统集成的示例:

// CRM系统中创建合同后自动发起审批流程
class ContractService {
    public function createContract($contractData) {
        // 保存合同信息
        $contractId = $this->saveContract($contractData);
        
        // 自动发起审批流程
        $processInstanceService = new \madong\think\wf\services\ProcessInstanceService();
        $instanceData = [
            'process_define_id' => 1001, // 合同审批流程ID
            'business_no' => 'CONTRACT_' . $contractId,
            'operator' => $contractData['creator_id'],
            'variable' => json_encode([
                'contract_id' => $contractId,
                'amount' => $contractData['amount'],
                'customer' => $contractData['customer_name']
            ])
        ];
        $processInstanceService->create($instanceData);
        
        return $contractId;
    }
}

7.4 监控与运维

  1. 关键指标监控

    • 流程实例创建数、完成数、异常数
    • 平均流程完成时间、各节点平均处理时间
    • 活跃流程实例数、待办任务数
  2. 告警机制

    • 长时间未处理的任务自动提醒
    • 流程异常终止告警
    • 系统资源使用率监控
  3. 定期维护

    • 定期清理历史数据或归档
    • 检查数据库索引和性能
    • 流程审计和优化

总结与展望

think-wf作为一款企业级工作流组件,凭借其强大的功能、灵活的配置和良好的可扩展性,为企业提供了高效的工作流解决方案。通过本文的介绍,你已经掌握了think-wf的安装配置、核心功能使用和最佳实践。

未来,think-wf将继续优化以下方向:

  • 增强流程设计器的可视化能力
  • 提供更多的流程模板和行业解决方案
  • 优化大数据量下的性能表现
  • 加强与AI技术的结合,提供智能流程推荐和自动化决策

希望本文能帮助你更好地理解和使用think-wf,如有任何问题或建议,欢迎通过官方渠道反馈。

提示:本文档基于think-wf最新版本编写,随着版本迭代,部分功能可能会有变化,请以实际代码为准。

【免费下载链接】think-wf think-wf 工作流工作流组件。think-orm结合Ingenious工作流引擎一个服务组件,为企业提供一套高效、灵活的工作流解决方案。 【免费下载链接】think-wf 项目地址: https://gitcode.com/motion-code/think-wf

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值