Activiti工作流(一):OA 上的那些请假流程如何快速实现呢?

大家好,我是 杰哥

在公司中,每个人都需要经常创建或者审批一些流程,比如说转正申请请假流程出差申请等等

那么,你有没有想过,要是你,你会如何实现这些流程的控制逻辑呢?

比如说请假申请,首先需要提前定义好一个流程模板吧,包括当请假天数大于 3 天的话,需要公司级的领导审批等这些规则

然后当某个员工发起请假申请时,根据这个员工所在的部门以及请假天数等信息,便可以确定其具体的流程信息,包括每个节点的审批人

在任何一个审批节点,都需要看到这个流程的历史审批信息以及将来要走的流程吧,所以还需要将完成的和将要完成的任务保存下来

你应该很容易想到,我们可以通过表的字段状态来进行流程的这些逻辑控制

但是呢,简单的流程的话,还可以实现,流程一旦复杂一点,不仅需要实现的代码会增加,而且需要操作的表的数量也特别多,逻辑只会更复杂

那么,有没有现成的工作流框架,可以直接拿来使用,轻松实现这些逻辑,实现流程的自动化控制呢?

答案是肯定的,今天带领大家认识的就是一个专门用来管理工作流的框架:Activiti

一 理论篇

1 实现逻辑

Activiti 就是使用 BPMN 2.0 进行流程建模、流程执行管理,那么,BPMN 又是什么呢?

BPMN(Business Process Model AndNotation)- 业务流程模型和符号 是由 BPMI(BusinessProcess Management Initiative)开发的一套标准的业务流程建模符号,使用 BPMN 提供的符号可以创建业务流程

定义好的流程模板,最终会被存储至数据库表中,而它的实现逻辑其实就是封装了诸多流程控制的表的操作,提供给开发人员一些快捷操作的 API ,来进行快捷的工作流管理

2 实现步骤

使用 Activiti 这种工作流框架大致都分为以下几个步骤:

  • 流程定义

  • 部署流程定义

  • 启动流程实例

  • 查询当前用户的待办任务

  • 完成任务

说明:

流程定义就相当于是一个个的流程模板,比如预先定义好的请假流程、出差流程模板,而流程实例则是由各个员工发起的实实在在的流程,流程实例一旦创建,那么这个流程需要经历哪些审批环节,每个环节由哪个(或者哪些)人负责审批,便完全确定下来了

流程定义与流程实例的关系,你也可以理解为类与对象实例的关系。一个是静态的,一个则是真正被拿来使用的,相对动态

3 Service

Activiti 提供了几个 Service 类,用来管理工作流,常用的有以下四项:

  • 1)RepositoryService:提供流程定义和部署等功能。比如说,实现流程的的部署、删除,暂停和激活以及流程的查询等功能

  • 2)RuntimeService:提供了处理流程实例不同步骤的结构和行为。包括启动流程实例、暂停和激活流程实例等功能

  • 3)TaskService:提供有关任务相关功能的服务。包括任务的查询、删除以及完成等功能

  • 4)HistoryService:提供 Activiti 引擎收集的历史记录信息服务。主要用于历史信息的查询功能

    还有以下两项:

  • **1)**ManagementService:job 任务查询和数据库操作

  • **2)**DynamicBpmnService:无需重新部署就能修改流程定义内容

4 认识表结构

二 实战篇

以下进入实战环节,分别从生成 25 张表运行第一个 Activiti 流程实例,快速认识这个工作流框架的简单易用性

这两个例子,采用 Activiti7 版本,需要预先引入如下依赖:

<dependencies>

    <dependency>
         <groupId>org.activiti</groupId>
         <artifactId>activiti-engine</artifactId>
         <version>7.1.0.M6</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring</artifactId>
        <version>7.1.0.M6</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-model</artifactId>
        <version>7.1.0.M6</version>
    </dependency>

    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-converter</artifactId>
        <version>7.1.0.M6</version>
    </dependency>

    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-json-converter</artifactId>
        <version>7.1.0.M6</version>
    </dependency>

    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-layout</artifactId>
        <version>7.1.0.M6</version>
    </dependency>

    <dependency>
        <groupId>org.activiti.cloud</groupId>
        <artifactId>activiti-cloud-services-api</artifactId>
        <version>7.0.0.Beta1</version>
    </dependency>
    <!-- mysql 连接-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>

    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

    <!--lombok 工具 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.24</version>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.17.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值