最近项目出现一个应用场景,在加油站有很多用户使用微信、支付宝支付,但是由于网络等问题会出现用户支付成功,但是后台未到账的情况。为了补救这种问题,需要进行一系列的审批审核操作。

(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.

(二)自动生成的表的作用。



原文:https://blog.csdn.net/wangdazhu110/article/details/105063980

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐