上一篇博客【SpringBoot整合Flowable工作流-1(画流程定义) 】介绍用 Flowable-ui 画了一个简单的流程图。
这篇博客将介绍代码整合部分,主要内容有:【发布流程定义】、【开启流程任务】、【获取用户任务】、【用户审批任务】、【添加审批意见】、【获取流程图】、【获取我的待办任务】、【获取我发起的流程】、【我审批过的流程】…
1 | xml复制代码<dependency> |
创建数据库可以使用通过 Flowable 提供的 sql 实现,也可以通过程序自动创建数据库实现
3.1 Flowable 提供的 sql
下载文件 Flowable 相关的资源,进入 flowable.com/open-source…,然后点击 【Download Flowable v6.x.x】,下载下来是一个压缩包,解压后会看到如下目录结构
1 | python复制代码└─database # 数据库文件 |
找到 $/database/create/database/create/flowable.mysql.all.create.sql 文件,导入mysql数据库即可
3.2 应用程序自动创建数据库(推荐)
需要在 jdbc 的 url 中添加一个参数值,nullCatalogMeansCurrent=true
如下:
1 | ini复制代码jdbc:mysql://127.0.0.1:3306/flowable?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&nullCatalogMeansCurrent=true |
4.1 常用的几个Service类
1 | java复制代码/** 运行时Service(用于运行时流程实例、流程变量、流程节点) */ |
4.2 流程定义相关代码
4.2.1 发布流程定义
上一篇博客【SpringBoot整合Flowable工作流-1(画流程定义) 】画好了流程,然后下载下来是一个 “请假流程1.bpmn20.xml” 的xml文件,下载就可以通过代码把这个流程发布到流程定义中了。
代码如下
1 | java复制代码 @Override |
基于 SpringBoot 发布流程定义,还有一种巧妙的形式,那就是在 resources 目录下建立一个文件夹 processes ,然后把对应的流程文件发到这个文件夹下即可,启动 SpringBoot 项目的时候,通过观察日志就会发现该流程就自动发布了。(不推荐)
1 | css复制代码workflow-server |
4.2.2 查询流程定义
1 | java复制代码// 创建 ProcessDefinitionQuery |
4.2.3 获取流程定义xml
1 | java复制代码public String getXmlResource(String id) { |
4.2.4 获取流程定义图片
1 | java复制代码public String getDiagramImageResource(String id) { |
4.2.5 删除流程定义
1 | java复制代码public void deleteByIds(List<String> ids) { |
4.3 流程实例相关代码
4.3.1 添加流程实例审批意见
起到类似于记录流程的操作记录的作用,我这里是自己封装了一层,我封装了自己的业务用户ID、用户名、执行类型、意见内容…
1 | java复制代码@Data |
添加流程实例审批意见
1 | java复制代码// 添加流程实例审批记录 |
4.3.2 启动流程实例
1 | java复制代码@Data |
启动流程实例
1 | java复制代码@Transactional(rollbackFor = Exception.class) |
4.3.3 获取流程进度图片
1 | java复制代码public String getProcessImage(String processInstanceId) { |
4.3.4 获取流程审批意见
1 | java复制代码@Override |
4.3.5 流程实例执行下一步
1 | java复制代码@Data |
1 | java复制代码@Transactional(rollbackFor = Exception.class) |
4.3.6 终止流程实例
1 | java复制代码@Data |
1 | java复制代码public void stopProcessInstance(ProcessInstanceStopRequestDTO requestDTO) { |
4.3.7 批量获取流程实例变量列表
这个方法是自定义实现的,因为 Flowable 没有对应的根据流程实例ID列表获取批量的流程变量
1 | java复制代码/** |
Service
1 | java复制代码@Override |
Dao
1 | java复制代码List<HistoryVariable> findHistoryVariableList(@Param("ew") QueryWrapper<HistoryVariable> ew); |
xml
1 | xml复制代码<select id="findHistoryVariableList" resultType="cn.leadersheep.xz.workflow.server.entity.flowable.HistoryVariable"> |
4.3.8 获取流程实例分页
获取流程实例分页,因为这里涉及到
数据权限过滤
、以及待办
、已办
、历史记录
、我发起
等等,逻辑还是挺复杂的,因此简单通过Flowable的API可能不是一个很好的选择了,因此这里自定义实现,通过查找Flowable相关的数据库表找出符合记录
1.如果流程实例还在进行中数据是保存在
act_ru_*
这几张表中,如果流程实例结束了数据是保存在act_hi_*
这几张表中,因此查询的时候需要根据不用场景查询不用的表;
2.流程定义图中定义的分配的用户组,保存在act_ru_identitylink
表中;
流程实例-分页请求参数
1 | java复制代码@Data |
流程定义-分页响应结果
1 | java复制代码@Data |
Service
1 | java复制代码public PageDTO<ProcessInstancePageResponseDTO> findPage(ProcessInstancePageRequestDTO requestDTO) { |
Dao
1 | java复制代码/** |
Xml
1 | xml复制代码<select id="findMyTodo" resultType="cn.leadersheep.xz.workflow.client.dto.flowable.response.ProcessInstancePageResponseDTO"> |
简单描述一下我遇到的情况,我当时是在Windows上开发的,设置流程图的字体为宋体,没有出现乱码的情况,但是我部署到Linux服务器上查看流程图的时候文字出现了乱码,然后我大概能猜到是因为缺少字体的问题(因为之前有了解过activiti流程图乱码是缺少字体的问题),所以我这次也是按照相同套路给Linux添加宋体字体就解决了。
5.1 复制Windows上的字体
进入目录:C:\Windows\Fonts 复制 “宋体 常规”到桌面上备用
5.2 Linux找出 java 位置
执行命令
1 | 复制代码whereis java |
我的是在 /var/lib/jdk/jdk1.8.0_211/bin/java
5.3 复制字体文件到 jre/lib/fonts
找出了java的位置,jre 的位置在 java 的前几级目录下
1 | bash复制代码java: |
5.4 复制字体文件到系统字体目录中(/usr/share/fonts)
这个目录可能不存在,如果不存在则自己创建出来
1 | bash复制代码/usr/share/fonts |
5.5 重启系统
1 | 复制代码reboot |
重启系统之后,启动应用程序,即不会出现乱码的情况了,祝你好运~
上一篇博客:SpringBoot整合Flowable工作流-1(画流程定义)
基于 flowable-spring-boot-starter 整合的代码基本完成,但是感觉还是少了一点东西,流程一步一步执行下去了,什么时候执行完?现在到什么环节了?貌似我们都不太清楚,执行完了业务要怎么操作,这就要介绍一下 flowable 全局事件监听器了,下一篇博客将介绍 flowable 全局事件监听器,结合监听器实现业务的通知业务。
- 公众号:IT加载中(it_loading)
- CSDN:blog.csdn.net/JinglongSou…
- 博客:ihouyu.cn/
- 邮箱:for.houyu@qq.com
程序员[ 后宇 ],是一个关注编程,热爱技术的Java后端开发者,热衷于 [ Java后端 ],[ 数据爬虫领域 ]。不定期分享 I T 技能和干货!!欢迎关注 “IT加载中”,一个只出 干货 和 实战 的公众号。
本文转载自: 掘金