1、程序运行
程序首次运行之后需要运行一下运行以下sql文件,此sql文件影响流程测试中的功能使用:
请假申请建表sql语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| DROP TABLE IF EXISTS leaveapply; CREATE SEQUENCE leaveapply_seq; CREATE TABLE leaveapply( id int NOT NULL DEFAULT NEXTVAL ('leaveapply_seq'), user_id varchar(20) NULL DEFAULT NULL , start_time timestamp(0) NULL DEFAULT NULL , end_time timestamp(0) NULL DEFAULT NULL , leave_type varchar(45) NULL DEFAULT NULL , reason varchar(400) NULL DEFAULT NULL , apply_time timestamp(0) NULL DEFAULT NULL , reality_start_time timestamp(0) NULL DEFAULT NULL , reality_end_time timestamp(0) NULL DEFAULT NULL , PRIMARY KEY (id) );
ALTER SEQUENCE leaveapply_seq RESTART WITH 1;
COMMENT ON TABLE public.leaveapply IS '请假表';
COMMENT ON COLUMN public.leaveapply.id IS '主键'; COMMENT ON COLUMN public.leaveapply.user_id IS '请假人'; COMMENT ON COLUMN public.leaveapply.start_time IS '起始时间'; COMMENT ON COLUMN public.leaveapply.end_time IS '结束时间'; COMMENT ON COLUMN public.leaveapply.leave_type IS '类型'; COMMENT ON COLUMN public.leaveapply.reason IS '原因'; COMMENT ON COLUMN public.leaveapply.apply_time IS '申请时间'; COMMENT ON COLUMN public.leaveapply.reality_start_time IS '实际起始时间'; COMMENT ON COLUMN public.leaveapply.reality_end_time IS '实际结束时间';
|
采购申请建表sql语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| DROP TABLE IF EXISTS purchase;
CREATE SEQUENCE purchase_seq;
CREATE TABLE purchase ( id int NOT NULL DEFAULT NEXTVAL ('purchase_seq'), itemlist text NOT NULL, total varchar(10) NOT NULL, applytime timestamp(0) NULL DEFAULT NULL, applyer varchar(45) NULL DEFAULT NULL, processinstanceid varchar(50) NULL DEFAULT NULL, PRIMARY KEY (id) );
ALTER SEQUENCE purchase_seq RESTART WITH 4;
|
发起会议建表sql语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| DROP TABLE IF EXISTS meeting;
CREATE SEQUENCE meeting_seq;
CREATE TABLE meeting ( id int NOT NULL DEFAULT NEXTVAL ('meeting_seq') , topic varchar(100) NULL DEFAULT NULL , host varchar(50) NULL DEFAULT NULL , place varchar(50) NULL DEFAULT NULL , peoplelist varchar(255) NULL DEFAULT NULL , start_time timestamp(0) NULL DEFAULT NULL , end_time timestamp(0) NULL DEFAULT NULL , content text NULL , PRIMARY KEY (id) );
ALTER SEQUENCE meeting_seq RESTART WITH 1;
|
执行完成之后,流程测试下的三个功能即可使用。
2、系统原流程的初步介绍
本节以请假申请(Leaveapply)为例
2.1、程序的层级结构

LeaveapplyController:控制层,控制业务逻辑流程。
Controller层负责具体的业务模块流程的控制,主要调用Service层里面的接口去控制具体的业务流程,控制的配置也需要在配置文件中进行配置。
与Service层不同,Controller层负责具体的业务模块流程的控制,Service层负责业务模块的逻辑应用设置。
Controller层一般会与前台的js文件进行数据的交互。
Leaveapply:实体层,用于存放实体类,与数据库中的属性值基本保持一致,包含有该实体类的属性和对应属性的get、set方法。
ILeaveapplyService:Service接口
LeaveapplyServiceImpl:Service业务层处理
Service层主要负责业务模块的逻辑应用设计,先创建接口,再创建相应的实现类,然后在配置文件里进行配置实现其关联,接着就可以调用service层的接口进行业务逻辑应用的处理。
对Service层的业务逻辑进行封装有利于业务逻辑的独立性和重复利用性。
LeaveapplyMapper.java:Mapper接口,在mybatis中主要与xxx.xml内相互一一映射。
LeaveapplyMapper.xml:映射文件。
dao(mapper)层:数据访问层
DAO层首先会创建DAO接口,然后在配置文件中定义该接口的具体实现类,接着就可以在模块中调用DAO的接口并进行相应数据业务的处理,不需要去关注该接口的具体实现类是什么。
DAO层的数据源和数据库连接的参数都是在配置文件中进行配置的,主要对数据进行持久化操作,对外提供对数据库的增删改查操作。

前端页面,主要与控制层进行数据交互。
2.2、工作流的运行流程
2.2.1、通过flowable UI搭建流程图
请假流程信息图如下:

1、创建流程:流程标识以及流程名称的填写,此处在构建流程的时候进行编辑

2、用户任务:分配用户和表单标识的填写
分配用户:

表单标识:

3、异或网关的使用,与流程线上的表达式配合使用

流程线上设置流通过条件

注:
1、在进行流程图绘制的时候注意保存,此UI界面会出现不稳定的状况,多保存有百利而无一害。
2、此流程图只是用到的最基本的组件,其还有更多的功能可以探索和配置。
2.2.2、流程的使用
2.2.2.1、发起请假申请

下一步接受保存之后的数据传输状况:

service接口层

service业务处理层

1、将相关数据更新的数据库中,对其进行持久化


2、每次新增一条请假信息的时候,都需要新增一个流程,所以需要对流程进行初始化。

其在生成的xml文件对应的信息为:


此处填写完成applyuserid与deptleader的值也是为了完成第一个任务
3、因已经完成相关信息的填写,所以也需要结束第一个任务。

其根据key值以及id确定流程,然后对其进行完成。
此时流程所处的位置:

2.2.2.2、部门领导审批
办理人确认

下方所展示的为生成流程文件中对应的信息

controller层的整理数据,引出前端页面

前端页面:

对应的前端页面所在位置:rain-workflow/src/main/resources/templates/flowable/leaveapply/deptleadercheck.html
关键部分的前端代码为:

对应的,JS对其进行处理的方法

对应的流程变量为:

任务处理后端实现:

此处为flowable的相关接口与语法,不再进行介绍。
执行完成之后,即完成了此节点的任务。
此时流程处于:

2.2.2.3结语
以下的相关流程均与其原理相似,可查看相关源代码学习
3、实操
3.1、业务分析
选取的流程业务如下:

红色框住的相关部分,需要在申请的时候填写,其与部分均在流程中进行填写。
3.2、设计表结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| DROP TABLE IF EXISTS chafengshenpibiao; CREATE SEQUENCE chafengshenpibiao_seq; CREATE TABLE chafengshenpibiao( id int NOT NULL DEFAULT NEXTVAL ('chafengshenpibiao_seq'), user_id varchar(20) NULL DEFAULT NULL , blbm varchar(100) NULL DEFAULT NULL , blbm_time timestamp(0) NULL DEFAULT NULL , cfky_person varchar(100) NULL DEFAULT NULL , qwdf varchar(100) NULL DEFAULT NULL , cfky_reason varchar(2000) NULL DEFAULT NULL , cfky_th varchar(4000) NULL DEFAULT NULL , blbmzr_opinion varchar(1000) NULL DEFAULT NULL , glwy_opinion varchar(1000) NULL DEFAULT NULL , glfzr_opinion varchar(1000) NULL DEFAULT NULL , remark_all varchar(1000) NULL DEFAULT NULL , PRIMARY KEY (id) );
ALTER SEQUENCE chafengshenpibiao_seq RESTART WITH 1;
COMMENT ON TABLE public.chafengshenpibiao IS '查封/扣押审批表';
COMMENT ON COLUMN public.chafengshenpibiao.id IS '主键'; COMMENT ON COLUMN public.chafengshenpibiao.user_id IS '提交审批表人'; COMMENT ON COLUMN public.chafengshenpibiao.blbm IS '办理部门'; COMMENT ON COLUMN public.chafengshenpibiao.blbm_time IS '时间'; COMMENT ON COLUMN public.chafengshenpibiao.cfky_person IS '查封-扣押人物'; COMMENT ON COLUMN public.chafengshenpibiao.qwdf IS '前往地方'; COMMENT ON COLUMN public.chafengshenpibiao.cfky_reason IS '查封-扣押原因'; COMMENT ON COLUMN public.chafengshenpibiao.cfky_th IS '查封-扣押的东西'; COMMENT ON COLUMN public.chafengshenpibiao.blbmzr_opinion IS '办理部门主任意见'; COMMENT ON COLUMN public.chafengshenpibiao.glwy_opinion IS '管理委员意见'; COMMENT ON COLUMN public.chafengshenpibiao.glfzr_opinion IS '管理副主任意见'; COMMENT ON COLUMN public.chafengshenpibiao.remark_all IS '备注';
|
3.3、生成表单以及程序导入
注意java类型的选择,选择错误会导致程序功能报错

生成的sql语句只需要执行第一个,其他的不需要执行

程序存放地方发生变化,请注意区分:

对比此处的程序结构,其和上面所介绍的程序基本相似,所以我们在生成的表单上进行在开发。

3.4、搭建流程图
1、新建模型

2、流程图设计

3、用户任务分配

4、表单的标识:

5、流条件设计

6、确认完成流程图之后,将流程图下载下来,放入项目中。

7、重新编译运行,查看流程是否自动发布部署。

3.5、程序的编写
3.5.1、提前需要做的
文件:


添加的代码为:
1
| useGeneratedKeys="true" keyProperty="id"
|
文件:


添加的代码为:
1 2 3 4 5 6 7 8
| @Autowired private ISysUserService userService; @Resource private RuntimeService runtimeService; @Resource private TaskService taskService;
|
文件:


添加的代码为:
1 2 3 4 5 6 7 8 9 10 11
| @Resource private RuntimeService runtimeService; @Resource private TaskService taskService; @Resource IdentityService identityService; @Resource HistoryService historyService;
|
3.5.2、办理部门填写审批表
3.5.2.1、前端渲染
controller层

前端页面需要进行相关的修改
3.5.2.2、新建保存,流程的初始化
主要是对ChafengshenpibiaoServiceImpl.java进行编辑

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
@Override public int insertChafengshenpibiao(Chafengshenpibiao chafengshenpibiao) { int rows = chafengshenpibiaoMapper.insertChafengshenpibiao(chafengshenpibiao); identityService.setAuthenticatedUserId(chafengshenpibiao.getUserId()); HashMap<String, Object> variables = new HashMap<>(); variables.put("applyuserid", chafengshenpibiao.getUserId()); variables.put("blbmzr", chafengshenpibiao.getBlbmzr()); runtimeService.startProcessInstanceByKey("chafengkouyaflow", String.valueOf(chafengshenpibiao.getId()), variables); Task autoTask = taskService.createTaskQuery().processDefinitionKey("chafengkouyaflow").processInstanceBusinessKey(String.valueOf(chafengshenpibiao.getId())).singleResult(); taskService.complete(autoTask.getId()); return rows; }
|
3.5.3、办理部门主任审批意见
controller层:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@GetMapping("/blbmzrcheck") public String blbmzrcheck(String taskid, ModelMap mmap) { Task t = taskService.createTaskQuery().taskId(taskid).singleResult(); String processId = t.getProcessInstanceId(); ProcessInstance p = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult(); if (p != null) { Chafengshenpibiao chafengshenpibiao = chafengshenpibiaoService.selectChafengshenpibiaoById(Long.parseLong(p.getBusinessKey())); mmap.put("chafengshenpibiao", chafengshenpibiao); mmap.put("taskid", taskid); mmap.put("userlist", userService.selectUserList(new SysUser())); } return prefix + "/blbmzrcheck"; }
|
本回合的重点在于前端页面的相关更改
3.5.4、管理委员意见
此处和 3.5.3 类似
3.5.6、管理副主任意见
此处和 3.5.3 类似
3.5.7、重新提交申请
controller层与 3.5.3 类似
前端需要另外操作。
4、工作流上传文件
参考链接:
https://blog.csdn.net/zhongzk69/article/details/90940280
5、flowable提升
官网:
https://www.flowable.com/
英文文档:
https://www.flowable.com/open-source/docs/bpmn/ch02-GettingStarted/
中文文档:
https://tkjohn.github.io/flowable-userguide/#_introduction
外网,不科学上网访问速度慢
http://43.142.65.122:6888/
私人服务器,访问速度尚可,将在 2023-06-09 到期。
中文文档其他相关链接
https://gitee.com/JinTianHeNinMengCha/flowable
视频教程:
https://www.bilibili.com/video/BV1PY411F7ir/
系统讲解flowable的相关原理
https://www.bilibili.com/video/BV1SG4y117fw/
RuoYi-Flowable-Plus的视频讲解