前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【二十三】springboot整合activiti7(1)实战演示篇

【二十三】springboot整合activiti7(1)实战演示篇

作者头像
小z666
发布2024-06-21 17:46:12
5020
发布2024-06-21 17:46:12
举报
文章被收录于专栏:java

本章接着后面几章会进行一个springboot+activiti7的整合,记录自己的学习过程,由于demo篇幅过长,会分好几章进行描述,等写完后,在文章末尾会附上后面几章的链接,本章主要描述demo的需求以及最终效果的一个演示,具体搭建以及实现在后面几章进行依次描述。

一、Demo描述

场景:假设某某公司现在进行了一个管理上的整顿,如果一个产品经理想要提需求,除了要满足甲方以外,还必须让码农们满意,这时就可以有一个审批过程。如下:

ae1fed7d41ec4f828b47ade851c405b7.png
ae1fed7d41ec4f828b47ade851c405b7.png

​ 后面就通过整合activiti的方式实现如上的一个审批流程。

实现的效果就是:从产品经理发起流程,后面每个节点都可以通过或者退回,退回就是退回到产品经理步骤。然后实现一个流程记录跟踪和流程图跟踪功能。除了审批通过和退回初始节点外,其他的操作后面空了再慢慢学习。


二、准备工作

1、第一步

准备数据库。

需要activi的表以及自己的业务表,activiti的表在部署时会自动创建,现在先不管,本次demo涉及的业务表有如下几个:

表名

描述

user

用户表

role

角色表

user_role

用户角色关联表

demand

需求表

代码语言:javascript
复制
CREATE TABLE `demand` (
  `id` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键',
  `status` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '流程状态,-1是未启动,0是填写表单,1是组长审批,2是开发经理审批,3是项目经理审批,4是结束',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '需求名称',
  `content` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '需求具体内容',
  `salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '盐字段',
  `taskid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '任务id',
  `createuser` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '发起人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;
代码语言:javascript
复制
CREATE TABLE `role` (
  `id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '主键',
  `role` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;
1f85600967674a1480133b5bbd2999b0.png
1f85600967674a1480133b5bbd2999b0.png

代码语言:javascript
复制
CREATE TABLE `user` (
  `id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '主键',
  `username` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;
c39ef4c1ea3749c88dbbd342f6b5b4cb.png
c39ef4c1ea3749c88dbbd342f6b5b4cb.png

代码语言:javascript
复制
CREATE TABLE `user_role` (
  `id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '主键',
  `userid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户id',
  `roleid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin;
e635816df9f84d09a7f6c4fc8892daea.png
e635816df9f84d09a7f6c4fc8892daea.png

2、第二步

idea安装插件,绘制流程图。

绘制activiti可以识别的流程图并实现部署,activiti默认可以部署.bpmn和**.bpmn20.xml结尾的文件。

idea有很多画bpmn图的插件,我选择的是activiti BPMN visualizer。

a9e728971b2c481683d934690c9dd523.png
a9e728971b2c481683d934690c9dd523.png

安装好之后,重启idea,在创建的springboot项目的resources资源目录下右键新建一个如下文件。

创建完成后会生成一个xml文件,在这个文件右键,选择view..........就可以打开流程图了。

5e91ea8ffe674542b608582a4d617eb2.png
5e91ea8ffe674542b608582a4d617eb2.png

在图中通过右键添加进行绘制。

8f9575002cd84fc6862391ddd91fdf12.png
8f9575002cd84fc6862391ddd91fdf12.png

最终根据demo的需求场景绘制了如上流程图。菱形是排他网关,长方形是用户事件

每个节点以及线上面的具体参数后面再讲,此处先讲一个东西参数最好不要用重名的,不然会出问题。

3、第三步

创建项目、导入所需依赖。

这是我项目的目录结构

ba719a1dbebc4ec4bc0e99b94f835c3c.png
ba719a1dbebc4ec4bc0e99b94f835c3c.png

然后导入这个demo所需要的依赖,如下:

代码语言:javascript
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--    工作流依赖    -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M3.1</version>
            <exclusions>
                <exclusion><!-- 排除activiti的mybatis,避免和外面的mybatis-plus冲突 -->
                    <!-- 重点坑,不然启动项目会报错mybatisplus缺少类   -->
                    <artifactId>mybatis</artifactId>
                    <groupId>org.mybatis</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.22</version>
        </dependency>

        <!--   数据依赖     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--流程图依赖-->
        <!--  试了几个版本的,有些版本的会导致图片展示不全,注意  -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-image-generator</artifactId>
            <version>5.20.0</version>
        </dependency>

    </dependencies>

几个坑需要注意一下,上面有在备注里面标注,比如,mybatisplus和activiti的冲突问题以及之后的预览流程图功能的依赖会导致展示不全的问题等。

4、修改配置文件

989c35d040f0480b8ffbee15c4e5af79.png
989c35d040f0480b8ffbee15c4e5af79.png

代码语言:javascript
复制
server:
  port: 8080

spring:
  datasource:
    username: root
    password: 123456
    #    加上nullCatalogMeansCurrent=true才能自动创建activiti需要的表
    url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true

  activiti:
    database-schema-update: true
    check-process-definitions: true
    #  注意,如果activiti后面加上了/,就要求启动的时候process文件夹中需要有流程定义文件
    #  是指定activiti流程描述文件的前缀(路径),启动时,activiti就会去寻找此路径下的流程描述文件,并且自动部署
    process-definition-location-prefix: classpath:/activiti/
    #  suffix 是一个String数组,表示描述文件的默认后缀名,默认**.bpmn和**.bpmn20.xml
    #    process-definition-location-suffixes:
    #      - **.bpmn
    #      - **.bpmn20.xml
    #  Activiti7历史数据无法自动插入,开启下面两个配置
    history-level: audit
    db-history-used: true
#  mapper.xml文件所在路径
mybatis-plus:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志

具体的描述我都有写在注释上面。


三、效果展示

准备工作完成之后就可以开始编码实现了。demo代码有点多,下面先只展示效果。

1、首先模拟登录张三(产品经理,id为1),进入我的需求界面提出需求。

a5f513d47f4041408d6f62379b651632.png
a5f513d47f4041408d6f62379b651632.png

2、新增完成后,流程是未启动状态,张三点击发起流程,并点击提交审核按钮,选择审批人点击保存。

f9e48bef6e3b46c482b5e89e72e7b1bb.png
f9e48bef6e3b46c482b5e89e72e7b1bb.png

9a48f4447e964f85857e1123bc71c446.png
9a48f4447e964f85857e1123bc71c446.png

b0a50bded19843a08d675a0e6afcb06b.png
b0a50bded19843a08d675a0e6afcb06b.png

3、此时点击查看流程按钮。

5dc4f48d8b7c4a7291be3bf470a36bdf.png
5dc4f48d8b7c4a7291be3bf470a36bdf.png

4、可以看到流程现在在组长那里,就是数据库配置的李四,然后登录李四的账号,进入待办界面,查看待办列表。

680e3c3045664243b0e3cbe6ef878b39.png
680e3c3045664243b0e3cbe6ef878b39.png

9110ef8dd48b477da0f63dc0160daa62.png
9110ef8dd48b477da0f63dc0160daa62.png

5、点击退回按钮,退回给张三重新写需求。

fe1a95835ddf45d59d26969af81eacc2.png
fe1a95835ddf45d59d26969af81eacc2.png

0a6500ba5a3942be9e3dfed297e0cef0.png
0a6500ba5a3942be9e3dfed297e0cef0.png

6、登录张三(id:1)账号,重新提交需求。

125ae210306b4fd49ea76a789f54dbce.png
125ae210306b4fd49ea76a789f54dbce.png

b752efe68075425c95967d53bb61e2aa.png
b752efe68075425c95967d53bb61e2aa.png

44969aab6bd54f79b26e5026f3d2ba32.png
44969aab6bd54f79b26e5026f3d2ba32.png

7、点击提交审核,继续选择审批人。

0f8ebfd719a74cd5baa9745599e56f05.png
0f8ebfd719a74cd5baa9745599e56f05.png

800325c9d83b4c23b100d38347ca2e4a.png
800325c9d83b4c23b100d38347ca2e4a.png

8、登录李四的账号,重新审批(id:2)

38df6137f3b34dbb8fdc775aecf2b475.png
38df6137f3b34dbb8fdc775aecf2b475.png

e1e0168c04454092857e458c9bfeb314.png
e1e0168c04454092857e458c9bfeb314.png

9、这次选择同意

a305f976a29c4d76855ad289b71e5047.png
a305f976a29c4d76855ad289b71e5047.png

195d2f14cfc6468683bd65331f329b96.png
195d2f14cfc6468683bd65331f329b96.png

10、再次查看流程图

d6473af806db450188d9fdf1c6f974ed.png
d6473af806db450188d9fdf1c6f974ed.png

11、登录王五的账号(id:3)

6a8ee90536824bda8d0e9c656d06688b.png
6a8ee90536824bda8d0e9c656d06688b.png

12、点击同意

3cebf0d76a58402fb9b70157ce62878a.png
3cebf0d76a58402fb9b70157ce62878a.png

0114d147711d48ada650966df9e84faf.png
0114d147711d48ada650966df9e84faf.png

13、查看流程图

39d42a8467154675a8ac2e900d1774dd.png
39d42a8467154675a8ac2e900d1774dd.png

14、登录赵六的账号进行审批,(id:4)

9df57d83178c4249adaa91ebff1cc498.png
9df57d83178c4249adaa91ebff1cc498.png

724347a1ad6147aba409b44daa5e2052.png
724347a1ad6147aba409b44daa5e2052.png

15、点击通过

2c11ead80f2c40cdb3dd1642e37b466a.png
2c11ead80f2c40cdb3dd1642e37b466a.png

df4566d13ee349bb87d2820c647634da.png
df4566d13ee349bb87d2820c647634da.png

16、再次回到张三的需求列表,流程状态已结束

67ed7ee39843424cb354c138d2171811.png
67ed7ee39843424cb354c138d2171811.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Demo描述
  • 二、准备工作
  • 三、效果展示
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档