Activiti请假案例

wen java案例 1

本文目录导读:

Activiti请假案例

  1. 📚 目录导读(Table of Contents)
  2. 引言:为什么选择Activiti作为工作流引擎?
  3. 需求分析与流程设计:请假业务流程拆解
  4. 环境准备与依赖配置(Spring Boot + Activiti 7)
  5. 核心模型构建:BPMN 2.0 请假流程图详解
  6. 流程部署、启动与任务处理的代码实战
  7. 高级功能:会签、驳回与历史记录查询
  8. 常见问题与最佳实践(含FAQ问答)
  9. Activiti在企业应用中的价值与展望

📚 目录导读(Table of Contents)

  1. 引言:为什么选择Activiti作为工作流引擎?
  2. 需求分析与流程设计:请假业务流程拆解
  3. 环境准备与依赖配置(Spring Boot + Activiti 7)
  4. 核心模型构建:BPMN 2.0 请假流程图详解
  5. 流程部署、启动与任务处理的代码实战
  6. 高级功能:会签、驳回与历史记录查询
  7. 常见问题与最佳实践(含FAQ问答)
  8. Activiti在企业应用中的价值与展望

引言:为什么选择Activiti作为工作流引擎?

在当今的企业级应用开发中,审批流程(如请假、报销、采购)是高频刚需,Activiti作为一款轻量级、开源的BPMN 2.0工作流引擎,凭借其强大的流程可视化、高可扩展性以及与Spring生态的无缝集成,已成为Java技术栈中最流行的流程引擎之一,相较于jbpm或Flowable,Activiti在社区活跃度、文档完整度和REST API支持上更具优势,尤其适合中小型及快速迭代的企业项目。

根据谷歌SEO趋势分析,近两年“Activiti请假流程”、“Spring Boot Activiti”等关键词搜索量稳定上升,说明开发者对实战案例有极高的需求,本文摒弃枯燥的理论,直接通过一个完整的请假案例,带您走通从流程图设计到代码落地的全链路。


需求分析与流程设计:请假业务流程拆解

场景设定: 公司员工小王需要请假3天,流程需经过直属主管审批;若请假天数超过3天,则还需部门经理审批。

流程节点梳理:

  • 开始事件 → 提交请假申请(填写表单) → 条件判断(天数≤3?) → [是] 主管审批 → 结束;[否] 主管审批 → 经理审批 → 结束。
  • 每个审批节点包含“同意”和“驳回”两个网关分支。

设计要点: 利用独占网关(Exclusive Gateway) 处理分支判断,利用用户任务(User Task) 绑定审批人角色,流程需记录审批意见、时间以及最终状态。


环境准备与依赖配置(Spring Boot + Activiti 7)

技术栈选择: Spring Boot 2.7.x + Activiti 7.1.0.M6 + MyBatis Plus + MySQL 8.0。

关键Maven依赖示例(伪代码):

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.1.0.M6</version>
</dependency>

配置核心属性:application.yml中设置数据库连接、自动部署开启(spring.activiti.database-schema-update: true)以及流程资源路径(spring.activiti.process-definition-location-prefix: classpath:/processes/)。

注意: 在Activiti 7中,默认使用Spring Security进行用户认证,简化时可配置内存用户。


核心模型构建:BPMN 2.0 请假流程图详解

使用Activiti Modeler或IDEA插件绘制leave.bpmn20.xml核心节点定义如下:

  • 开始事件(StartEvent): 无特殊属性。
  • 用户任务(UserTask):
    • leave-apply:负责人设为${assignee}(流程变量)。
    • manager-approve:负责人设为${manager}
  • 独占网关(Gateway): 判断条件表达式:${days > 3},流向“经理审批”或“直接结束”。
  • 结束事件(EndEvent): 终结节点。

BPMN源码片段摘要:

<bpmn:userTask id="managerApprove" name="部门经理审批"
               activiti:assignee="${manager}"/>
<bpmn:exclusiveGateway id="gateway1" default="toEnd"/>
<bpmn:sequenceFlow id="flow1" sourceRef="gateway1"
                   targetRef="managerApprove">
    <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">
        <![CDATA[${days > 3}]]>
    </bpmn:conditionExpression>
</bpmn:sequenceFlow>

流程部署、启动与任务处理的代码实战

(1)部署流程: 在Spring Boot启动类中,通过RepositoryService自动扫描并部署classpath下的BPMN文件。

(2)启动流程实例(Controller层):

Map<String, Object> vars = new HashMap<>();
vars.put("days", 4);
vars.put("manager", "zhangmg");
ProcessInstance pi = runtimeService.startProcessInstanceByKey("leaveProcess", vars);

(3)完成任务(带审批结论):

Task task = taskService.createTaskQuery()
        .taskAssignee("user1").singleResult();
Map<String, Object> resultVars = new HashMap<>();
resultVars.put("approved", true);
taskService.complete(task.getId(), resultVars);

(4)动态驳回与流程终止: 若审批不通过,利用runtimeService.deleteProcessInstance()终止流程,或设置跳转节点实现驳回。


高级功能:会签、驳回与历史记录查询

  • 会签(多实例): 设置<multiInstanceLoopCharacteristics>,实现多人依次或同时审批,在请假场景中,可扩展为“部门全员会签”。
  • 任意驳回: 通过RuntimeService.createChangeActivityStateBuilder()实现节点跳转,如管理员驳回至“重新申请”。
  • 历史记录: HistoryService提供createHistoricProcessInstanceQuery()按流程实例ID查询实时状态、耗时与操作轨迹,可用于生成报表。

常见问题与最佳实践(含FAQ问答)

❓ 问答1:Activiti 7和6相比,最大的变化是什么?

答: Activiti 7彻底模块化,将工作流引擎与Spring Boot Starter解耦,同时强制要求配置Spring Security,且移除了基于MyBatis的旧版IDM管理界面,建议基于7.x标准API开发,并配套自定义用户体系。

❓ 问答2:流程节点长时间未处理,如何自动提醒?

答: 结合Quartz定时任务,每5分钟查询ACT_RU_TASK表中任务创建时间,与当前时间比对,若超过阈值,则调用TaskService添加提醒或发送邮件。

❓ 问答3:多实例会签,如何动态指定审批人集合?

答: 在启动流程时,将assigneeList作为集合变量传入,并在BPMN中设置<activiti:collection>${assigneeList}</activiti:collection>,引擎会自动为每个元素创建子任务。

最佳实践建议:

  • 涉及金额或天数变动时,务必使用版本化管理流程定义,避免调试混乱。
  • 将所有BPMN文件放在resources/processes目录,并在启动前利用xml持久化工具做语法校验。

Activiti在企业应用中的价值与展望

通过上述请假案例,我们已经实现了流程可视化配置、动态变量绑定、网关决策、历史数据追踪等核心功能,Activiti的价值不仅在于简化审批流代码,更在于它提供了业务与流程的优雅解耦,让非技术人员也能通过模型修改流程。

随着Activiti对Cloud Native和事件驱动架构的持续支持,它将在微服务编排场景中扮演更重要的角色。建议您下载本文案例源码,修改流程节点并部署演练,深切体会BPMN引擎带来的效率变革。


(本文基于搜索引擎多篇Activiti请假实战教程综合重构,已去除冗余表述,增补代码细节与故障排查要点,以确保内容深度符合谷歌SEO E-E-A-T标准。)

抱歉,评论功能暂时关闭!