springboot2.2 集成 activity6实现请假完整流程示例详解

网友投稿 377 2022-11-29


springboot2.2 集成 activity6实现请假完整流程示例详解

新手学习记录。写在springboot test 示例  示例代码地址看结尾。后面有带页面的示例。

SpringBoot Test无页面简单示例

员工请假流程

员工发起申请,附带请假信息(请假几天)

单位领导审批,如果通过,交付经理审批,不通过,重新申请

经理审批,如果请假天数不超过三天,经理1审批

如果请假天数在3-5天,经理3审批

超过5天,经理2审批

经理审批通过,流程结束,经理审批不通过,员工重新申请

流程图

代码

activiti.cfg.xml为必须文件且数据库连接正确,否则ProcessEngines.getDefaultProcessEngine()会报空指针。

复制代码

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans http://springframework.org/schema/beans/spring-beans.xsd">

测试类

三个方法可合并在一起运行,拆开是自己为了方便查看代码步骤。

1. 先运行deploymentProcess()部署一个流程。

2. 运行startLeaveProcess() 开启流程。

3. 运行getTaskAndComplete()走流程。循环一次性整个流程走完。

package com.blackcat.activity;

import org.activiti.engine.*;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.eeZgeGLTbShngine.task.Task;

import org.junit.jupiter.api.Test;

import org.springframework.boot.test.context.SpringBootTest;

import java.util.HashMap;

import java.util.Map;

/**

* @Title 申请测试

* @Description

* @author zhanghui

* @date 2020年07月17日 15:06

* @version V1.0

* @see

* @link https://blog.csdn.net/fly_fly_fly_pig/article/details/81700820 参考该博客

* @since V1.0

*/

@SpringBootTest

class LeaveProcessTest {

// 获取默认的流程引擎

private ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

// 实例流程id,用来记录流程,以便获取当前任务

private String processInstanceId;

// 部署一个流程

@Test

void deploymentProcess(){

RepositoryService rs = engine.getRepositoryService();

Deployment deploy = rs.createDeployment().addClasspathResource("processes/LeaveProcess.bpmn").deploy();

rs.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();

}

// 开启流程

@Test

void startLeaveProcess(){

// 获取runtimeservice对象

RuntimeService runtimeService = engine.getRuntimeService();

// 根据流程key值,获取流程

String processKey = "leaveProcess";

// 将信息加入map,以便传入流程中

Map variables = new HashMap<>();

variables.put("employeeName", "张三");

variables.put("day",10);

// 开启流程

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey, variables);

// 将得到的实例流程id值赋给之前设置的变量

processInstanceId = processInstance.getId();

System.out.println("流程开启成功.......实例流程id:"+processInstanceId);

}

// 开始走流程

// 1.获取当前任务,并且完成

@Test

void getTaskAndComplete(){

// processInstanceId = "12501";

// 获取taskservice实例

TaskService taskService = engine.getTaskService();

// 开始进行流程

while(engine.getRuntimeService()

.createProcessInstanceQuery()// 获取查询对象

.processInstanceId(processInstanceId)// 根据id查询流程实例

.singleResult()// 获取查询结果,如果为空,说明这个流程已经执行完毕,否则,获取任务并执行

!=null){

Task task = taskService.createTaskQuery()// 创建查询对象

.processInstanceId(processInstanceId)// 通过流程实例id来查询当前任务

.singleResult();// 获取单个查询结果

String taskName = task.getName();

if(taskName.equals("发起申请")){// 职员节点

completeEmployeeTask(task);

}else if(taskName.equals("领导审批")){// 领导节点

completeLeaderTask(task);

}else{// 经理节点

completeJingliTask(task);

}

}

System.out.println("审核结束..........");

}

// 职员提交申请

void completeEmployeeTask(Task task){

// 获取任务id

String taskId = task.getId();

// 完成任务

engine.getTaskService().complete(taskId);

System.out.println("职员已经提交申请.......");

}

// 领导审批

void completeLeaderTask(Task task){

// 获取任务id

String taskId = task.getId();

// 领导意见

Map variables = new HashMap<>();

variables.put("leaderResult", 1);

// 完成任务

engine.getTaskService().complete(taskId, variables);

System.out.println("领导审核完毕........");

}

// 经理审批

void completeJingliTask(Task task){

// 获取任务id

String taskId = task.getId();

String name = task.getName();

// 经理意见

// 领导意见和经理意见,用0和1表示,0表示未通过,1表示通过

// 任一环节设置不同意,陷入死循环

Map variables = new HashMap<>();

variables.put("result", 1);

// 完成任务

engine.getTaskService().complete(taskId, variables);

System.out.println("经理审核完毕........,审核经理:"+name);

}

参考博客:https://blog.csdn.net/fly_fly_fly_pig/article/details/81700820

源码地址:https://gitee.com/kylin_lawliet/springboot-demos/tree/master/springboot-activity3

SpringBoot含页面完整示例

流程方面与上方示例代码差不多,加了页面与mybatis plus。就不贴上代码,直接放示例代码吧。

流程图

效果图

源码地址:https://gitee.com/kylin_lawliet/springboot-demos/tree/master/springboot-activity4


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java导出网页表格Excel过程详解
下一篇:Java创建多线程异步执行实现代码解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~