Activiti7工作流引擎:审批通过或拒绝

一:前言

众所周知:Activiti只提供了完成方法 taskService.complete(taskId),没有提供所谓的退回或者跳转方法,作为一个工作流框架不提供这个功能感觉就像缺了一个胳膊,如果想控制从后面一个节点退回到前面某个节点或者从前面某个节点跳转到后面某个节点就要自己想办法了,主要有两种方式:

一:通过使用排它网关Gateway,配置不同的条件来指定跳转节点的目标节点,如果节点流转比较多就会导致流程图的线比较多,不太灵活,一般用于节点之间跳转比较固定的流程。

二:自定义Command来实现:

二:BPMN

当流程图的节点比较多又比较复杂时,对节点的排版布局很重要,好的排版布局看起来比较清晰,最好不要出现线与线之间有过多的交汇,更不要出现线与线之间重合,可以通过改变节点的布局方向来调整:

  • 横向:所有节点在水平线一条线上。
  • 纵向:所有节点在垂直一条线上。
  • 混合:根据流程图的复杂性,灵活排版。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

<process id="GatewayLeaveProcess" isClosed="false" isExecutable="true" name="请假流程" processType="None">
    <startEvent id="_2" name="StartEvent"/>
    <userTask activiti:assignee="${initiator}" activiti:exclusive="true" id="initiator" name="发起人"/>
    <userTask activiti:exclusive="true" id="vgmApprove" name="副总经理审批"/>
    <exclusiveGateway gatewayDirection="Unspecified" id="_5"/>
    <sequenceFlow id="_6" sourceRef="_2" targetRef="initiator"/>
    <sequenceFlow id="_7" sourceRef="initiator" targetRef="vgmApprove"/>
    <sequenceFlow id="_8" sourceRef="vgmApprove" targetRef="_5"/>
    <userTask activiti:exclusive="true" id="gmApprove" name="总经理审批"/>
    <sequenceFlow id="_10" name="同意" sourceRef="_5" targetRef="gmApprove">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[${vgmResult==1}]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_3" name="不同意" sourceRef="_5" targetRef="initiator">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[${vgmResult==0}]]>
      </conditionExpression>
    </sequenceFlow>
    <exclusiveGateway gatewayDirection="Unspecified" id="_4"/>
    <sequenceFlow id="_9" sourceRef="gmApprove" targetRef="_4"/>
    <endEvent id="end"/>
    <sequenceFlow id="_12" name="同意" sourceRef="_4" targetRef="end">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[${gmResult == 1}]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="_13" name="不同意" sourceRef="_4" targetRef="vgmApprove">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[${gmResult == 0}]]>
      </conditionExpression>
    </sequenceFlow>
  </process>

三:代码

repositoryService.createDeployment()
        .addClasspathResource("processes/GatewayLeaveProcess.bpmn")
        .name("请假流程")
        .deploy();

Map<String, Object> variables = new HashMap<>();
variables.put("initiator", "huihui");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("GatewayLeaveProcess", variables);

// 1.发起人
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.complete(task.getId());

// 2.副总经理审批(不同意)
Map<String, Object> variables2 = new HashMap<>();
variables2.put("vgmResult", 0);
task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
taskService.setAssignee(task.getId(), "monday");
taskService.complete(task.getId(), variables2);

在这里插入图片描述

四:阅读

曾经以为
老去是很遥远的事情
突然发现
年轻已经是很久以前的事了
时光好不经用
抬眼已是半生
真正让人焦虑的
不是孤单
不是贫穷
更不是衰老
而是到了中年
你才发现
你从来没有按照自己喜欢的方式活过
这烟火人家
事事值得
事事也遗憾


好奇传送门 》》》》》》》》

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Activiti 是一个轻量级、灵活的开源工作流引擎,用于在应用程序中实现业务程的自动化。它是一个基于Java的工作流和业务程管理(BPM)平台,可以帮助开发人员设计、执行和管理各种业务程。 Activiti 提供了许多功能,包括: 1. 程定义:您可以使用 Activiti 的图形化设计器来定义和建模业务程。这些程可以由各种任务、条件和网关组成,以满足您的业务需求。 2. 程执行:一旦定义了程,您可以使用 Activiti 引擎来执行和管理程实例。引擎会按照定义的程规则自动处理任务、路由程和记录执行历史。 3. 任务管理:Activiti 允许您分配和管理任务,以便团队成员可以完成特定的工作。您可以指定任务的优先级、截止日期和参与者,以确保任务按时完成。 4. 事件监听:Activiti 支持监听各种事件,例如程启动、任务分配、任务完成等。这使得您可以根据不同的事件触发自定义逻辑来处理业务需求。 5. 历史数据记录:Activiti 可以记录所有程实例和任务的历史数据,包括执行时间、参与者、结果等。这些数据有助于您分析和优化业务程。 总的来说,Activiti 提供了一个强大且可扩展的平台,使您能够轻松地管理和优化业务程。无论是简单的审批程还是复杂的工作流Activiti 都可以满足您的需求,并帮助您提高工作效率和业务质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风流 少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值