最近项目出现一个应用场景,在加油站有很多用户使用微信、支付宝支付,但是由于网络等问题会出现用户支付成功,但是后台未到账的情况。为了补救这种问题,需要进行一系列的审批审核操作。
(1)加油站员工对用户支付成功的手机界面进行拍照,然后上传,提交给客服人员。也可以是对有争议的交易进行提交。
(2)客服人员对照片的清晰度和有效性进行审核,然后继续提交给运维。
(3)运维人员根据审核后的照片对这笔交易进行核查,核查通过后在报表中进行修改和确认到账。然后提交给财务。
(4)财务对这笔交易在系统中进行确认进行打款。然后提交给财务主管。
(5)财务主管确认后对这笔交易再次核对,然后提交给客户方的财务。
(6)客户方的财务确认,对这笔交易进行核销。
这一现实需求考虑到使用activiti工作流来实现。下面将在我们原来的springcloud的项目中新建一个moudle,命名为example-activiti。话不多少直接开始。
1,file--》new moudle,选择spring initializr。
2,填写项目相关信息,注意红框部分的填写。
3,选择eureka client。
4,这里的路径一定不能选错。
5,项目建成的目录结构如下。
6,把原来创建的web或者service的pom文件和properties文件复制一份过来,删除掉无用的引用,并且修改项目名即可。
7,安装actibpm插件。file--》plugin--》搜索actiBPM安装即可。
8,安装后要修改一些配置,防止编辑的流程图乱码。
9,加上一行-Dfile.encoding=UTF-8就可以了。
10,添加activiti和数据库的依赖。新建一个数据库,表格会自动生成。在配置文件中加入数据库的连接配置。
11,下面几个步骤一定要做,要不然启动报错。因为springboot2.0不能与activiti6.0.0直接集成使用,因为activiti6.0.0出来的时候springboot2.0还没有出来。
(1)springboot启动类注解上增加以下内容。
(2)在配置文件中增加以下配置。
(3)项目的resource目录下新建一个processess文件夹。file-->new-->directory
(4)在processes里创建一个bpmnfile文件,随便创建一个即可。(不创建也可以,在配置文件中配置的spring.activiti.check-process-definitions=false就是不检查这个文件,我没有测试,最好还是随便创建一个吧)
(5)把右侧的图标直接拖进来即可。
(6)把光标悬停的图标的中心中,然后等变化了以后拖拽就可以连线了。然后完成绘制。此时启动项目就不会报错了。
12,新建一个config包,并创建一个配置类,防止流程图中文乱码。
13,在processes里绘制一个流程图。中间步骤都选择的是usertask。注意要点击空白处,给你的流程命名和id。
(1)点击空白处设置id和name。
(2)复制一份shenhe.bpnm文件,并重命名为shenhe.xml。修改里面的值。这里是因为不知道为什么,直接修改bpnm里的不生效。然后把bpnm删除掉,把shenhe.xml复制一份,重新命名shenhe.bpnm。
14,启动eureka和activity两个项目,会在数据库中自动生成27张表。
15,activiti默认的ID生成策略在高并发场景下会出现ID重复的情况,因此在高并发场景下建议采用UUID的策略。修改activiti配置文件,增加以下语句,并增加IdGen类。
16,创建controller,service,impl包,准备进行简单测试。
17,新建ActivitiController。
18,新建service接口和实现。
19,打开ie请求接口的测试地址,或者写个test也可以。
20,多次请求,返现每次请求,都会多一项任务。
补充介绍:
(一)配置文件详解。
(1) spring.activiti.database-schema-update。databaseSchemaUpdate配置项可以设置流程引擎启动和关闭时数据库执行的策略。
false:false为默认值,设置为该值后,Activiti在启动时,会对比数据库表中保存的版本,如果版本不匹配时,将在启动时抛出异常。
true:设置为该值后,Activiti会对数据库中所有的表进行更新,如果表不存在,则Activiti会自动创建。
create-drop:Activiti启动时,会执行数据库表的创建操作,在Activiti关闭时,执行数据库表的删除操作。
drop-create:Activiti启动时,执行数据库表的删除操作在Activiti关闭时,会执行数据库表的创建操作。
(2)spring.activiti.history-level.保存历史数据级别设置为full最高级别,便于历史数据的追溯spring.activiti.history-level=full.
none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
(3)spring.activiti.check-process-definitions.关闭activiti自动部署(使用流程设计器部署,不使用具体文件访问方式)spring.activiti.check-process-definitions=false.
(二)自动生成的表的作用。
本篇介绍了springboot+IDEA使用activiti工作流的简单环境搭建。下一篇将继续详细介绍。
关注公众号:直立行走的程序猿
公众号回复springcloud可获得git下载地址