当前位置: 首页 > 后端技术 > Java

Activiti7入门介绍

时间:2023-04-01 16:10:43 Java

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帮助我们完成的。什么是BPMNBPMN定义了一个业务流程图(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)欢迎加入公众号