当前位置: 首页 > news >正文

springboot + activiti实现activiti微服务化

概述

本文介绍如何将springboot+activiti进行整合,并配合eureka,zuul和feign实现activiti的微服务化,将流程控制和业务逻辑分离. 并实现了几个比较特殊的功能,比如时间段委托(某人请假或出差,出差时间内,所有待办交给被委托人处理),比如节点的无限级加签功能(流程本身有不确定性,临时增加审核人)

详细

一、分析流程

整理了一下整个流程,共分以下四个步骤:

1.首先进行springboot2.x和activiti的整合。

    注1:整合不需要太多的操作,只需引入指定pom索引,并简单添加配置就能直接使用;注2:整合包括了activiti的模型编辑插件activiti-moleder的整合和简单修改;注3:附件中存在几个可以直接运行的bpmn文件,分别对应了几个功能

2.添加eureka-server和zuul,并创建一个工作流功能的使用者,使用feign对activiti的暴露方法进行访问实现流程流转,将核心功能和流转功能分开,核心功能自己保留,流转功能以接口的方式暴露,实现activiti的微服务化。

    注1:流程使用者需要自己编写对应的业务流程,工作流模块只负责流程管理,将业务和流程控制最大限度解耦分离。注2:核心功能包括模型创建,编辑,定义,导出,用户用户组的整合;注3:流转功能包括提交,完成,查询流程变量,获取流程自定义表单,获取待办已办事项等;

3.实现时间段委托功能

    注1:例如某人需要请假或者出差,请假出差期内,他的所有待办事项将交于被委托人处理。注2:一旦委托,将只有被委托人可以看到任务,委托人将失去该任务的审核权限(待完善);注3:只能实现办理人和候选人的委托,候选组内人员的委托未实现;注4:实现方法是通过全局事件监听器对用户实体创建的时间进行监听,然后修改

4.实现节点的无限级加签

    注1:功能有些变态,因为个人理解,如果业务部门没有固定的流程,没有必要使用工作流引擎,手写流程他不香吗?注2:限制比较高,需要用户任务节点使用多实例串行类型;注3:加签的实现方式有很多,有手动增加节点,并持久化(持久化是为了日志),有多实例任务加签(非串行)等,这里只实现了串行多实例加签;

5.实现节点的自定义表单

    注1:自定义表单分为内置表单和外置表单,一个保存字段信息,一个保存的是外部制作好的表单的key注2:本demo只实现了内置表单,即字段信息保存;注3:这种方法需要前端拿到字段之后,进行手动渲染;

二、具体实现过程及问题解决

第一步:

1.创建springboot项目,引入activiti的pom索引,以及配置文件;

pom.xml

注意:这里有个坑,使用tk.mybatis和activiti整合的伙伴注意了,要将这个排除

application.yml

然后直接运行会发现数据库中多了二十多张表

2.整合activiti-modeler:

先导入activiti-modeler的端文件

在传入必要的activiti的几个配置以及接口(必要接口,附件中有这里就不贴了,图片太多了影响阅读)

3.到此集成结束,正常的话可以直接运行,这是需要自行解决前端问题,最终结果如下:


 

成功!第一步结束!

第二步:

1.创建工作流任务使用者,并使用eureka,zuul以及feign进行微服务调用

如果需要查看eureka+zuul+feign的使用,请移步至springboot+eureka+zuul 完整demo
创建一个新的模块和activiti模块平级,这个模块包含具体的业务和流转服务接口的调用

具体业务代码

feign代码

具体的页面和请假业务需要自己编写,最终结果如下

没有实现登录功能,使用下拉框模拟待办事项的当前登录人

第二步骤结束

第三步:

1.实现全局的时间段委托功能

首先添加委托功能的CRUD,根据自己的业务去定义

定义一个activiti的全局事件监听器,并注册到springboot中

在事件监听器中,监听实体创建时间,并判断当前实体是否为 IdentityLinkEntity ,且是用户,则修改办理人

成功!第三步结束!

第四步:

1.实现节点的无限级加签

首先修改模型

再修改自定义表单属性

最后修改代码,如果需要加签,在act_ru_variables表中修改办理人集合和实例总数即可实现加签,加签后返回,其实是在最后一个节点审批的时候,再加签给第一个办理人

第五步:

1.自定义表单的实现

首先在一个用户任务节点配置字段

后台取出保存的字段,并返回前端手动渲染


 


 

最终结果如下

至此,全部结束,项目最终结构如下,具体实现在demo,demo可直接运行,并包含几个模型文件,可以直接使用

http://www.lryc.cn/news/157272.html

相关文章:

  • c语言练习41:深入理解字符串函数strlen strcpy strcat
  • Vue3+Vue-i18n+I18N ALLY+VSCODE 自动翻译多国语言
  • idea意外退出mac
  • 百度智能云千帆大模型平台2.0来了!从大模型到生产力落地的怪兽级平台!!
  • k8s nfs-client 添加挂载参数 —— 筑梦之路
  • 【算法】堆排序 详解
  • 解决Maven依赖下载问题:从阿里云公共仓库入手
  • 【Java基础】学习笔记2 - 数组运算符与main方法
  • stable diffusion实践操作-复制-清空-保存提示词
  • 【Spring 事务和事务传播机制】
  • 【爬虫】实验项目二:模拟登录和数据持久化
  • 图文版:以太网二层接口类型(含配套习题)
  • 生信豆芽菜-机器学习筛选特征基因
  • v-html富文本里面的图片设置宽高不起作用的原因
  • pdf文档怎么压缩小一点?文件方法在这里
  • CMD关闭占用端口
  • 复制粘贴是怎么实现的
  • mybatisplus多租户原理略解
  • Spring整合RabbitMQ-配制文件方式-1-消息生产者
  • Python Opencv实践 - 凸包检测(ConvexHull)
  • IP网络广播系统有哪些优点
  • 【LeetCode】83. 删除排序链表中的重复元素
  • 【大数据】Flink 详解(七):源码篇 Ⅱ
  • stable diffusion实践操作-SD原理
  • C++ Primer Plus第十三章编程练习答案
  • Elasticsearch:wildcard - 通配符搜索
  • 配置类安全问题学习小结
  • IMX6ULL移植篇-uboot源码目录
  • SAP MM学习笔记27- 购买依赖(采购申请)
  • C++零碎记录(八)