作者介绍
- 名称:warm
- dromara 开源组织成员,dromara/warm-flow作者
- 研发工程师、技术经理,工作经验8年。此工作流已经持续开发有一年有余。
- Gitee|Github
- 微信:warm-houhou;qq群:778470567
大家好,我是warm,是warm-flow工作流引擎的作者,来自于美丽的江西南昌,从事开发8年有余。此工作流持续开发一年了,那还得从工作流的痛点来说,
历史背景
flowable和activities确实大而全,但是这样对一般的项目会是好事吗?能早点下班吗
- 学习曲线: 对于初学者来说,学习可能需要一定的时间和精力。理解其概念、API 和配置可能需要一些耐心和实践。
- 复杂性: 对于简单的工作流程来说,引入可能会显得过于复杂。在某些情况下,使用简单的解决方案可能更合适。
- 定制化需求: 在一些特殊场景下,可能需要对进行定制化开发,以满足特定的需求。这可能需要深入理解其内部工作原理和源代码。
- 版本更新: 随着时间的推移,会发布新的版本,其中可能包含功能改进、bug 修复等。升级到新版本可能需要投入一定的时间和资源,以确保平稳过渡和兼容性。
- 阅读难度: 全英文注释,对于英文不好的人来说,确实有门槛。
那何不开发属于国人的工作流呢,为此耗时一年时间自研warm-flow工作流。
warm-flow能给你带来什么
[!IMPORTANT]
Warm-Flow国产工作流引擎🎉,其特点简洁轻量但又不简单,五脏俱全,组件独立,可扩展,可满足中小项目的组件。
- 简洁易用:只有7张表,代码量少,可快速上手和集成
- 审批功能:支持通过、退回、任意跳转、转办、终止、会签、票签、委派和加减签、互斥和并行网关
- 监听器与流程变量:支持五种监听器,可应对不同场景,灵活可扩展,参数传递,动态权限
- 流程图:流程引擎自带流程图,可在不集成流程设计器情况下使用
- 条件表达式:内置常见的条件表达式,并且支持自定义扩展
- orm框架扩展:目前支持MyBatis、Mybatis-Plus、Mybatis-Flex和Jpa,后续会由社区提供其他支持,扩展方便
- 数据库支持:目前支持MySQL 、Oracle 和PostgreSQL,后续会继续支持其他数据库或者国产数据库
- 多租户与软删除:流程引擎自身维护多租户和软删除实现,也可使用对应orm框架的实现方式
- 支持角色、部门和用户等权限配置
- 同时支持spring和solon
- 兼容java8和java17,理论11也可以
- 官方提供基于ruoyi-vue封装实战项目,很实用
接入warm-flow后妈妈再也不用担心我加班了
项目功能模块
流程流转管理
流程流转就像是warm-flow的驾驶人。让办理流程像喝水一样简单的事情。
// 部署流程
public void deployFlow() throws Exception {
defService.importXml(new FileInputStream("/xxx/leaveFlow-serial.xml"));
}
// 发布流程
public void publish() {
defService.publish(1219285650587652096L);
}
// 开启流程
public void startFlow() {
insService.start("2", getUser());
}
// 跳转流程
public void skipFlow() {
Instance instance = insService.skip(1232001238795685888L,getUser().skipType(SkipType.PASS.getKey())
.permissionFlag(Arrays.asList("role:1", "role:2")));
}
//任意跳转
public void skipAnyNode() {
Instance instance = taskService.skip(1219286332145274880L, getUser().skipType(SkipType.PASS.getKey())
.permissionFlag(Arrays.asList("role:1", "role:2")).nodeCode("4"));
}
// 终止流程
public void termination() {
taskService.termination(1232001396254052352L, getUser());
}
流程图管理
流程图管理就像warm-flow的门面。作为工作流引擎,当然是可以能脱离流程设计器,独立使用的,那流程图片生成是必不可少的。warm-flow自研了流程图绘制,通过设计器获取坐标,进行绘制流程的进度和状态(当然业务系统可以不集成设计器,可在作者提供的demo项目中设计好导出xml,业务系统再次导入即可)。

监听器管理
监听器可以说是工作流引擎的上限,灵活度和可扩展性的核心人物
- 监听器类型
- create:创建监听器,任务创建时执行
- start:开始监听器,任务开始办理时执行
- assignment: 分派办理人监听器,分派后执行
- finish:结束监听器,当前任务完成后执行
- 监听器生命周期

配置管理
配置文件可以让工作流使用更加方便,如虎添翼。
配置文件目前支持banner图和填充器配置,后续还会增加多租户和软删除等。
# warm-flow工作流配置 warm-flow: # 是否开启工作流,默认true enabled: true # 是否显示banner图,默认是 banner: true # 填充器 (可通过配置文件注入,也可用@Bean/@Component方式) data-fill-handler-path: com.ruoyi.system.handle.CustomDataFillHandler # 全局租户处理器(可通过配置文件注入,也可用@Bean/@Component方式) tenant_handler_path: com.ruoyi.system.handle.CustomTenantHandler # 是否开启逻辑删除(orm框架本身不支持逻辑删除,可通过这种方式开启) logic_delete: true # 逻辑删除字段值(开启后默认为2) logic_delete_value: 2 # 逻辑未删除字段(开启后默认为0) logic_not_delete_value: 0 # 当使用JPA时指定JpaPersistenceProvider jpa_persistence_provider: org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider # 内部已实现自动获取,失效时使用此配置(在使用mybatis扩展包时, 由于各数据库sql语句存在差异, 通过此配置兼容,默认为mysql) data_source_type: mysql
填充器也可通过代码方式注入
@Configuration
public class WarmFlowConfig {
/**
* 自定义填充 (可配置文件注入,也可用@Bean/@Component方式)
*/
@Bean
public DataFillHandler dataFillHandler() {
return new CustomDataFillHandler();
}
/**
* 全局租户处理器(可通过配置文件注入,也可用@Bean/@Component方式
*/
@Bean
public TenantHandler tenantHandler() {
return new CustomTenantHandler();
}
}
扩展支持
orm和数据库扩展
作为新时代的程序员不能固步自封,只支持mybatis和msyql。所以目前已经解偶数据库操作,按照mybatis方式扩展其他的orm或者数据库类型即可

条件表达式扩展
工作流引擎想要灵活跳转,就得有相应表达式,满足不同的条件,执行不同的任务,目前支持,并且支持规则扩展
>, >=, <, <=, =, !=, like, not like