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)

欢送退出公众号