activiti 多部门审批_Activiti 基本介绍

简介

这两天工作中要用到Activiti,就简单学习了下,做一个记录,好脑子不如烂笔头,记下来牢靠些,来吧,话不多说,一个字:

Activiti是什么,为什么要用它

Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),可以定义流程、执行流程并以不同方式对其实现运行。(巴拉巴拉一大堆,其实我也没听懂)。

还是用自己的化总结下吧。

其实就是一个工作审批流,在我们日常生活中,审批是非常常见的,加班打车,需要把发票贴到报销单,然后提交给组长,组长审批完毕,提交给部门主管,部门主管审核完毕,给财务部门,财务部分审核完毕,给你银行卡打钱,一个审批的流程结束了。

其实可以理解为审批流就是一个载体(火车),它不管你是什么业务数据(人还是货物),它能驱动业务向前发展(目的地)。

Activiti 生成表

既然它能管理我们的审批,肯定要存储数据,数据库表是必不可少的,所以我们先建下表。
新建一个SpringBoot 项目

Pom.xml 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0modelVersion>  <groupId>com.gljgroupId>  <artifactId>activiti-create-tableartifactId>  <version>0.0.1-SNAPSHOTversion>  <packaging>jarpackaging>    <parent>    <groupId>org.springframework.bootgroupId>    <artifactId>spring-boot-starter-parentartifactId>    <version>2.0.4.RELEASEversion>    <relativePath/> parent>     <dependencies>  <dependency>    <groupId>org.activitigroupId>    <artifactId>activiti-spring-boot-starter-basicartifactId>    <version>6.0.0version>dependency><dependency>    <groupId>org.mybatis.spring.bootgroupId>    <artifactId>mybatis-spring-boot-starterartifactId>    <version>1.3.2version>dependency> <dependency>    <groupId>io.springfoxgroupId>    <artifactId>springfox-swagger2artifactId>    <version>2.8.0version>dependency><dependency>    <groupId>io.springfoxgroupId>    <artifactId>springfox-swagger-uiartifactId>    <version>2.8.0version>dependency><dependency>    <groupId>mysqlgroupId>    <artifactId>mysql-connector-javaartifactId>    <scope>runtimescope>dependency> dependencies>project>

application.properties

server.port=8080spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/db_activiti?autoReconnect=true&characterEncoding=utf8&useSSL=falsespring.datasource.username=rootspring.datasource.password=rootmybatis.mapper-locations=classpath:mapper/*.xmlmybatis.type-aliases-package=com.glj.modelspring.activiti.check-process-definitions=false

项目入口类

package com.glj;import org.activiti.spring.boot.SecurityAutoConfiguration;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.ComponentScan;@ComponentScan(basePackages = {"com.glj"})@MapperScan(basePackages = {"com.glj"})@SpringBootApplication(exclude = SecurityAutoConfiguration.class)public class ActivitiApplication {    public static void main(String[] args) {        SpringApplication.run(ActivitiApplication.class, args);    }}

运行后,生成28张表

7b8bb7519af32b57ef675c08e8382ec9.png

表说明

表名默认以“ACT_”开头,并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配。

ACT_GE_* : “GE”代表“General”(通用),用在各种情况下;

ACT_HI_* : “HI”代表“History”(历史),这些表中保存的都是历史数据,比如执行过的流程实例、变量、任务,等等。Activit默认提供了4种历史级别:

ACT_ID_* : “ID”代表“Identity”(身份),这些表中保存的都是身份信息,如用户和组以及两者之间的关系。如果Activiti被集成在某一系统当中的话,这些表可以不用,可以直接使用现有系统中的用户或组信息;

ACT_RE_* : “RE”代表“Repository”(仓库),这些表中保存一些‘静态’信息,如流程定义和流程资源(如图片、规则等);

ACT_RU_* : “RU”代表“Runtime”(运行时),这些表中保存一些流程实例、用户任务、变量等的运行时数据。Activiti只保存流程实例在执行过程中的运行时数据,并且当流程结束后会立即移除这些数据,这是为了保证运行时表尽量的小并运行的足够快;

表分类表名称表含义
act_evt_log事件处理日志表
一般数据act_ge_bytearray通用的流程定义和流程资源
act_ge_property系统相关属性
流程历史记录act_hi_actinst历史的流程实例
act_hi_attachment历史的流程附件
act_hi_comment历史的说明性信息
act_hi_detail历史的流程运行中的细节信息
act_hi_identitylink历史的流程运行过程中用户关系
act_hi_procinst历史的流程实例
act_hi_taskinst历史的任务实例
act_hi_varinst历史的流程运行中的变量信息
用户用户组表act_id_group身份信息-组信息
act_id_info身份信息-组信息
act_id_membership身份信息-用户和组关系的中间表
act_id_user身份信息-用户信息
act_procdef_info死信任务
流程定义表act_re_deployment部署单元信息
act_re_model模型信息
act_re_procdef已部署的流程定义
运行实例表act_ru_deadletter_job执行失败任务表
act_ru_event_subscr运行时事件
act_ru_execution运行时流程执行实例
act_ru_identitylink运行时用户关系信息
act_ru_job运行时作业
act_ru_suspended_job运行时暂停任务
act_ru_task运行时任务
act_ru_timer_job运行时定时任务
act_ru_variable运行时变量表

具体的表结构及详细介绍可参考
Activiti数据库表结构 里面有详细的每个表介绍。

流程概念和术语

(1) 一个ProcessDefinition代表的业务流程。它用于定义流程中不同步骤的结构和行为。

(2) 部署流程定义意味着将流程定义加载到Activiti数据库中。

(3) 流程定义主要由BPMN 2.0标准定义,也可以使用Java代码定义它们,定义的所有术语也可用作Java类。

(4) 一旦我们开始运行流程定义,就可以称为一个流程process。

(5) processInstance是ProcessDefinition一个执行实例。

(6) 一个StartEvent与每一个业务流程有关,它表示该流程的切入点,同样,有一个EndEvent表示流程的结束。我们可以定义这些事件的条件。

(7) 开始和结束之间的所有步骤(或元素)称为任务,任务可以是各种类型的。最常用的任务是UserTasks和ServiceTasks。

顾名思义,UserTasks需要由用户手动执行,另一方面,ServiceTasks配置了一段代码,每当执行到达这段代码时,代码将被执行。

SequenceFlows用来连接任务,我们可以通过它将源元素和目标元素连接起来定义一个SequenceFlows;同样,我们还可以在SequenceFlow上定义条件,这样能在流程中创建条件路径。

有了流程定义,我们可以使用Activiti提供的服务功能进行流程运行。

Activiti提供的服务

RepositoryService帮助我们实现流程定义的部署。此服务会处理与流程定义相关的静态数据。
RuntimeService管理 ProcessInstances(当前正在运行的流程)以及流程变量
TaskService会跟踪 UserTasks,需要由用户手动执行的任务是Activiti API的核心。我们可以使用此服务创建任务,声明并完成任务,分配任务的受让人等。
FormService是一项可选服务,它用于定义中开始表单和任务表单。
IdentityService管理用户和组。
HistoryService会跟踪Activiti Engine的历史记录。我们还可以设置不同的历史级别。
ManagementService与元数据相关,在创建应用程序时通常不需要。
DynamicBpmnService帮助我们在不重新部署的情况下更改流程中的任何内容。

IDE 安装插件

由于我用的是eclipse,所以目前只说下再eclipse中是怎么添加Activiti插件的。
打开Eclipse -> Help -> Install New SoftWare-> Add
然后按照如下对话框输入:
Name:   Activiti Designer
Location: http://activiti.org/designer/update/

eeda561472fdecdb75ef23436dc2afb9.png

输入完成后,单击OK按钮等待下载完成后安装。安装完成后在菜单选项中会出现activiti的目录选项。

9881968ca02ce5b3f5cd63e1f2ce49af.png

设置eclipse activit插件的画流程图 选项

打开菜单Windows --> Preferences --> Activiti -->Save 下流程图片的生成方式

28b769c7a1bc9a105804f8592ed1e35f.png

勾选上Create process definition image when saving  the diagram操作,勾选上这个操作后在画流程图后保存eclipse会自动生成对应的流程图片。

结束语

现在表也建立好了,开发环境也好了,接下来就是设计审批模板,然后就可以发起一个审批任务了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拼接大屏数据展示_可视化大屏的UI设计是根据哪几个方面来进行?

随着大数据产业的发展&#xff0c;越来越多的公司开始意识到数据资源的管理和运用&#xff0c;特别是一些中、大型企业&#xff0c;在日常中会经常用到可视化大屏&#xff0c;这个时候就需要UI设计师能呈现出相应的视觉效果。下面&#xff0c;就给大家介绍一下可视化大屏的UI设…

00600 ora 关闭oracle_Oracle集群高可用故障切换

原文链接[WK-T]ORACLE 10G 配置故障转移(Failover)​blog.itpub.net文章参考&#xff1a;《大话 Oracle RAC 集群 高可用性 备份与恢复》 张晓明 编著Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一…

如何关闭window10自动更新

如何关闭Windows10的自动更新&#xff1f; 相信很多同学在用Windows10系统的时候&#xff0c;经常跳出更新系统的提示。 有时自动更新的时间&#xff0c;恰好是我们需要急用电脑的时候&#xff0c;而且系统更新比较慢&#xff0c;等待的时间长。 甚至经常会更新失败&#xf…

分割文本_PSENet、PANNet、DBNet三个文本检测算法异同

点击蓝字关注我们这三个文本检测算法都是segment base算法&#xff0c;通过由下而上的方式&#xff0c;先对text进行segment&#xff0c;然后再根据segment text&#xff0c;计算出text的instancePSENet近年来&#xff0c;自然场景文本检测在场景理解、产品识别、自动驾驶和目标…

maven安装过程以及手动添加jar包到本地仓库

Maven安装过程及手动添加JAR包到本地仓库详解 https://blog.csdn.net/niityzu/article/details/50997544 分类&#xff1a; Maven&#xff08;1&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 一、Maven介绍 Maven是一个项目构建…

怎么把文件放到docker容器里

1、查找所有容器id&#xff1a;docker ps -a 2、查找容器长ID&#xff1a;docker inspect -f {{.ID}} tomcat-container-id 3、拷贝本地文件到容器&#xff1a; 命令&#xff1a;docker cp 本地路径 容器长ID:容器路径 例子&#xff1a;docker cp /home/work/FDFS/1.jpg dfba3…

lisp医院化验系统_医院智能导视系统

众所周知&#xff0c;“看病难”已经成为了全民关注的社会问题&#xff0c;这一问题也不是一朝一夕能解决的。我司研发的医院智能导视系统&#xff0c;避免就医过程中不必要的时间浪费&#xff0c;大大有效的提高就医效率。医院智能导视系统为了有序推进医院信息化工作&#xf…

的环境下 qt 运行在_Ubuntu16.04环境下运行vins mono(环境配置及编译)之ROS kinetic的安装...

所需环境&#xff1a;ubuntu16.04ROS kineticopencv 3.3.1eigen3.3.3ceres solver 1.141.ROS Kinetic 的安装&#xff08;1&#xff09;设置sources.listsudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.l…

db2 jdbc驱动参数_JDBC详细整理(一)

一.什么是JDBCJDBC(Java DataBase Connectivity)就是Java数据库连接&#xff0c;说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库&#xff0c;JDBC是用Java语言向数据库发送SQL语句。二.JDBC原理早期SUN公司的天才们想编写一套可以连接…

生物学专业_江南大学微生物学(发酵)20002008历年考研专业课真题汇编

说明 1. 海量考研真题免费发布&#xff0c;欢迎关注公众号『守望考研』&#xff1b;2. 想获取本文对应的PDF文档以便打印使用&#xff0c;欢迎关注公众号了解领取方法&#xff1b;PS: PDF版文档清晰度更高、水印更小南开大学861微生物学1997-2001、2003-2011历年考研专业课真题…

error: ‘XXX‘ is defined but never used (no-unused-vars)报错的解决方案

错误原因 我的项目安装了eslint规范&#xff0c;ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具&#xff0c;它的目标是保证代码的一致性和避免错误 解决方案 一、在package.json文件内加入如下代码&#xff1a;然后保存重启项目。 "rules":…

平流式初沉池贮砂斗计算_?初沉池、二沉池的作用与区别-亨孚科技

初沉池的主要作用如下:1、去除沉淀物或浮游物&#xff0c;减轻后续处理设施的负荷。使细小的固体凝聚成大粒子&#xff0c;强化固液分离效果。3.它对胶体物质有一定的吸附和去除作用。4、初沉池在一定程度上起调节池塘的作用&#xff0c;对水质发挥一定的均质效应。5.一些废水处…

Navicat连接Oracle数据库失败,提示无效的用户名和密码(Invalid username and password)

1、Navicat是一款非常好用的数据库管理工具&#xff0c;可是一段时间没有使用&#xff0c;突然发现之前建立的Oracle连接无法打开&#xff0c;提示要输入旧密码和新密码以及确认新密码&#xff0c;在Navicat管理工具中连接之前超过180天的Oracle数据库&#xff0c;连接的时候&a…

把关与服务的关系_泉州代做投标书-电子标书值得信赖 - 泉州广告服务

此外&#xff0c;土壤资源对于人们的重要性不言而喻。为了推行土壤环境攻坚治理&#xff0c;江苏省共布设国控点位个&#xff0c;其中&#xff0c;基础点位个&#xff0c;风险点位个&#xff0c;背景点位个&#xff0c;为开展土壤污染调查奠定基础。这些地区监测站点的成功铺设…

口腔取模过程及注意事项_取模变形?教你三种方法,轻松防止取模变形!

点击查看更多精彩内容关键词&#xff1a;取模&#xff1b;适合人群&#xff1a;口腔修复科医生&#xff1b;共1497字 阅读4分钟在牙体修复中&#xff0c;一个完美的修复体是需要一个精确的模型和医生与技师之间的完美配合才能做到的。而因为模型变形出现返工的情况很多&#xf…

思科isis路由的优先级_华为 路由双点双向引入

点击上方蓝字关注我们哈喽&#xff0c;大家好&#xff01;我是艺博东 &#xff0c;是一个思科出身、专注于华为的网工&#xff1b;好了&#xff0c;话不多说&#xff0c;我们直接进入正题。双点双向重发布(OSPF、IS-IS)文章目录一、拓扑二、底层配置三、双点双向一、拓扑二、底…

python 根据名称获取pid_【Python学习笔记】76、常用第三方模块psutil

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下&#xff0c;有许多系统命令可以让我们时刻监控系统运行的状态&#xff0c;如ps&#xff0c;top&#xff0c;free等等。要获取这些系统信息&#xff0c;Python可以通过subprocess模块调用并获取结果。但…

需要单机还是集群部署_单机、分布式、集群的区别与联系

一、单机结构一个系统业务量很小的时候所有的代码都放在一个项目中&#xff0c;然后这个项目部署在一台服务器上就好了&#xff0c;整个项目所有的服务都由这台服务器提供。这就是单机结构。单机结构的缺点是显而易见的&#xff0c;单机的处理能力毕竟是有限的&#xff0c;当你…

拖动卡顿_四招教你解决PS软件卡顿问题!

你是不是经常会遇到这样的问题&#xff1f;刚装的Ps速度很快&#xff0c;使用一段时间以后发现越来越卡&#xff0c;时不时还会死机崩溃&#xff1f;大多数人遇到这种问题都是选择重装软件&#xff0c;或者重做系统&#xff0c;耗时耗力不说&#xff0c;过不了多久又会出现同样…