关于java:Activiti7入门介绍

4次阅读

共计 6035 个字符,预计需要花费 16 分钟才能阅读完成。

Hello,大家好,我是你们 CodeWorld,最近工作比较忙,很长时间没有更新过文章了,那么明天呢,就给大家来一期 Activiti7 的教学
话不多说,间接上

开篇前提

首先咱们要晓得什么是 Activiti,他怎么应用,解决了什么问题

Activiti 介绍

什么是工作流

工作流(Workflow),就是通过计算机对业务流程自动化执行治理。它次要解决的是“使在多个参与者之间依照某种预约义的规定主动进行传递文档、信息或工作的过程,从而实现某个预期的业务指标,或者促使此指标的实现”。
简略来说就是一个工作层级的关系,如果咱们有个员工销假,他须要填写请假条 -》提交申请 -》组长审批 -》经理审批 -》老板审批,这样的一个流程,叫它工作流,下级实现后主动流转到上级。

什么是工作流零碎

一个软件系统中具备工作流的性能,咱们把它称为工作流零碎。

工作流应用场景

  • 要害业务流程:订单、报价解决、合同审核、客户电话解决、供应链治理等。
  • 行政治理类:出差申请、加班申请、销假申请、用车申请、各种办公用品申请、购买申请、日报周报等但凡原来手工流转解决的行政表单。
  • 财务相干:付款申请,报销解决,估算打算审批等
    还有很多的场景都会应用到工作流

为什么要学习工作流

自定义工作流

员工销假案例:
第一步:员工提交申请(status 设置为 1)
第二步:组长审批通过(status 设置为 2)
第三步:组长审批不通过(status 设置为 3)
第四步:经理审批通过(status 设置为 4)
第五步:经理审批不通过(status 设置为 5)
第六步:老板审批通过(status 设置为 6)
第七步:老板审批不通过(status 设置为 7)
。。。。
如果说工作审核流程很多,那么咱们设置的状态就会很多,这样以此上来,耦合性很高,如果流程有所扭转,减少审核层级或者去掉某一个审核层级不要,那么这样改代码真的很头疼,加上各种各样的状态判断,人都傻了

还写的 der,间接跑路吧

当咱们遇到这种状况了,Activiti 就派上用场了,能够解决咱们遇到的问题,当员工提交销假申请后,如果组长审核通过,那么主动就会流转到经理审批;如果组长审核不通过,那么主动会流转到员工哪里,从新填写提交。
这样就解决了咱们代码的耦合性,如果流程又所变,咱们只须要批改流程图就能够。

工作流实现的原理

咱们能够在下面分明的看见每一个流程都对应了一条记录,保留在咱们的数据库中,当咱们删除或者减少的流程的时候,就和咱们的状态没有任何关系了。

应用步骤

  • 引入 Activiti:Activiti 其实就是用 java 开发的一套开源的框架。咱们要应用首先对应的 pom 依赖,而后咱们就能够通过 Activiti 提供的类和接口来进行操作了
  • 流程定义:就是应用专门流程建模工具来定义流程,把整个流程用图形的形式表达出来。像 idea 和 eclipse 都有对应的 Activiti 对应的流程订一起。
  • 流程定义的部署:把咱们用工具绘制进去的流程存储起来。其实就是把这个流程转化为具体的数据寄存到 mysql 中。
  • 启动一个流程实例:就是开始一次业务流程的运行。比方小明和小红都要销假,那么他们填写了销假申请之后,零碎就应该为他们两个都启动一个流程实例。不同的流程实例之间互相是不影响的。
  • 用户查问待办工作:一个工作要经验多个参与者,那么当初这个工作达到哪个中央了,应该由谁来解决了,这个时候咱们须要查问进去。然而因为咱们应用了 Activiti,咱们曾经不须要本人写 sql 来查问了,间接嗲用 Activiti 提供的接口就能够了。
  • 用户办理工作:用户查问待办工作后,就能够办理某个工作,如果这个工作办理实现还须要其余用户办理,比方洽购单创立后由部门经理审核,这个过程也是由 Activiti 帮忙咱们实现的。

什么是 BPMN

BPMN 定义了一个业务流程图(Business Process Diagram),该业务流程图基于一个流程图(flowcharting),该流程图被设计用于创立业务流程操作的图形化模型。而一个业务流程模型(Business Process Model),指一个由图形对象(graphical objects)组成的网状图,图形对象包含流动(activities)和用于定义这些流动执行程序的流程控制器(flow controls)

例如:这就是咱们画出的 BPMN

咱们再看 xml 文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1639040573404" name=""targetNamespace="http://www.activiti.org/test"typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="myProcess_1" isClosed="false" isExecutable="true" processType="None">
    <startEvent id="_2" name="开始"/>
    <userTask activiti:exclusive="true" id="_3" name="提交申请"/>
    <sequenceFlow id="_4" sourceRef="_2" targetRef="_3"/>
    <userTask activiti:exclusive="true" id="_5" name="组长审批"/>
    <sequenceFlow id="_6" sourceRef="_3" targetRef="_5"/>
    <userTask activiti:exclusive="true" id="_7" name="经理审批"/>
    <sequenceFlow id="_8" sourceRef="_5" targetRef="_7"/>
    <userTask activiti:exclusive="true" id="_9" name="老板审批"/>
    <sequenceFlow id="_10" sourceRef="_7" targetRef="_9"/>
    <endEvent id="_11" name="完结"/>
    <sequenceFlow id="_12" sourceRef="_9" targetRef="_11"/>
  </process>
  <bpmndi:BPMNDiagram documentation="background=#3C3F41;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
    <bpmndi:BPMNPlane bpmnElement="myProcess_1">
      <bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2">
        <omgdc:Bounds height="32.0" width="32.0" x="325.0" y="20.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3">
        <omgdc:Bounds height="55.0" width="85.0" x="305.0" y="110.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5">
        <omgdc:Bounds height="55.0" width="85.0" x="310.0" y="220.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_7" id="Shape-_7">
        <omgdc:Bounds height="55.0" width="85.0" x="310.0" y="315.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_9" id="Shape-_9">
        <omgdc:Bounds height="55.0" width="85.0" x="315.0" y="420.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="_11" id="Shape-_11">
        <omgdc:Bounds height="32.0" width="32.0" x="340.0" y="530.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="_12" id="BPMNEdge__12" sourceElement="_9" targetElement="_11">
        <omgdi:waypoint x="356.0" y="475.0"/>
        <omgdi:waypoint x="356.0" y="530.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_4" id="BPMNEdge__4" sourceElement="_2" targetElement="_3">
        <omgdi:waypoint x="341.0" y="52.0"/>
        <omgdi:waypoint x="341.0" y="110.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_6" id="BPMNEdge__6" sourceElement="_3" targetElement="_5">
        <omgdi:waypoint x="350.0" y="165.0"/>
        <omgdi:waypoint x="350.0" y="220.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_8" id="BPMNEdge__8" sourceElement="_5" targetElement="_7">
        <omgdi:waypoint x="352.5" y="275.0"/>
        <omgdi:waypoint x="352.5" y="315.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="_10" id="BPMNEdge__10" sourceElement="_7" targetElement="_9">
        <omgdi:waypoint x="355.0" y="370.0"/>
        <omgdi:waypoint x="355.0" y="420.0"/>
        <bpmndi:BPMNLabel>
          <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

这样咱们的流程图就创立好了,上面就开始撸代码
具体咱们到下一节在讲

好了,本次的技术解析就到这里了?如果感觉不错的话,点亮一下小星星 codeworld-cloud-shop
只看不点,不是好孩子哦!!

欢送退出 QQ 群(964285437)

欢送退出公众号

正文完
 0