SpringBoot 整合Activiti(二)——流程审批完整示例

前两天做了一个SpringBoot整合Activiti的完整示例,功能包括:退回/通过(节点条件)、指定办理人、生成流程图、高亮显示已办节点、查询任务列表(办理人)等,下面先简单记录(含完整代码),十六上班后再详细补充。

1、画流程图:


高亮生成的流程图(流程已至办理):


这个流程图比较简单,这里不介绍如何画的了(记得让文件名称与id相同),下面有最终的流程图源码。

2、设置业户提交、资料不全、已签发的事件触发代码:

点击选择事件节点,下方properties里选择如下图:


找不到properties的话 要选择Activiti模式就可以:


#{activityDemoServiceImpl.updateBizStatus(execution,"tj")} 表示将使用activityDemoServiceImpl服务的updateBizStatus方法,里面有两个参数,execution是当前流程节点对象,可获取流程信息及业务key等,"tj"字符串参数。(这里设置的服务名是小写开头,实际服务名是大写开头,否则找不到——不知道是不是因为我用的5.22)

3、指定受理/审批 办理人员:

也是选中,然后如下图操作:


${activityDemoServiceImpl.findUsersForSL(execution)}跟上面一样,不过注意,事件监听是以#开头,这里是以$符号。

4、增加2、3设置的服务方法(ActivityDemoServiceImpl)

SpringBoot的好处是默认会配置和注入很多服务,所以我们使用起来非常方便,流程图不需要单独部署,直接到服务根据流程名称或id就可以直接获取到想要的内容。

直接上代码了:

package com.example.service.impl;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.imageio.ImageIO;

import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;  
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.image.ProcessDiagramGenerator;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service 
public class ActivityDemoServiceImpl { 
	
	@Autowired  
	private RuntimeService runtimeService;  
	@Autowired  
	private TaskService taskService;  
	@Autowired  
	private HistoryService historyService;  
	@Autowired  
	private RepositoryService repositoryService;  
	@Autowired  
	private ProcessEngineConfigurationImpl processEngineConfiguration;  
	
	/**
	 * 启动流程
	 * @param bizId 业务id
	 */
	public void startProcesses(String bizId) { 
		ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo5", bizId);//流程图id,业务表id
		System.out.println("流程启动成功,流程id:"+pi.getId());
	}  
	
	/**
	 * 
	* <p>描述: 根据用户id查询待办任务列表</p>  
	* @author 范相如  
	* @date 2018年2月25日
	 */
	public List<Task> findTasksByUserId(String userId) {
		List<Task> resultTask = taskService.createTaskQuery().processDefinitionKey("demo5").taskCandidateOrAssigned(userId).list();
		return resultTask;
	}
	
	/**
	 * 
	 * <p>描述:任务审批 	(通过/拒接) </p>  
	 * @author 范相如  
	 * @date 2018年2月25日  
	 * @param taskId 任务id
	 * @param userId 用户id
	 * @param result false OR true
	 */
	public void completeTask(String taskId,String userId,String result) {
		//获取流程实例
		taskService.claim(taskId, userId);
		
		Map<String,Object> vars = new HashMap<String,Object>();
		vars.put("sign", "true");
		taskService.complete(taskId, vars);
	}
	
	/**
	 * 更改业务流程状态#{ActivityDemoServiceImpl.updateBizStatus(execution,"tj")}
	 * @param execution
	 * @param status
	 */
	public void updateBizStatus(DelegateExecution execution,String status) {
		String bizId = execution.getProcessBusinessKey();
		//根据业务id自行处理业务表
		System.out.println("业务表["+bizId+"]状态更改成功,状态更改为:"+status);
	}
	
	
	//流程节点权限用户列表${ActivityDemoServiceImpl.findUsers(execution,sign)}
	public List<String> findUsersForSL(DelegateExecution execution){
		return Arrays.asList("sly1","sly2");
	}
	
	//流程节点权限用户列表${ActivityDemoServiceImpl.findUsers(execution,sign)}
	public List<String> findUsersForSP(DelegateExecution execution){
		return Arrays.asList("spy1","uspy2");
	}
	
	/**
	 * 
	* <p>描述:  生成流程图
	 * 首先启动流程,获取processInstanceId,替换即可生成</p>  
	* @author 范相如  
	* @date 2018年2月25日  
	* @param processInstanceId
	* @throws Exception
	 */
	public void queryProImg(String processInstanceId) throws Exception {
		//获取历史流程实例  
        HistoricProcessInstance processInstance =  historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();  
       
		//根据流程定义获取输入流
		InputStream is = repositoryService.getProcessDiagram(processInstance.getProcessDefinitionId());
		BufferedImage bi = ImageIO.read(is);
		File file = new File("demo2.png");
		if(!file.exists()) file.createNewFile();
		FileOutputStream fos = new FileOutputStream(file);
		ImageIO.write(bi, "png", fos);
		fos.close();
	
Spring Boot是一个开源的Java开发框架,旨在简化Spring应用程序的开发过程。Activiti是一个开源的工作流和业务流程管理系统,它提供了一个用于设计、执行和监控业务流程的平台。 Spring Boot整合Activiti可以实现流程审批功能。首先,我们需要在pom.xml文件中添加Activiti的依赖。然后,在Spring Boot的配置文件中配置Activiti的相关信息,比如数据库连接、流程定义文件的位置等。 接下来,我们可以定义流程模型,包括流程节点、流程线等。可以使用Activiti提供的图形化工具Activiti Modeler进行可视化设计。然后,将流程模型部署到Activiti引擎。 在代码中,我们可以使用Activiti提供的API来启动流程实例、查询任务、完成任务等。通过编写监听器,我们可以在流程的不同节点上执行自定义的业务逻辑。 为了方便用户对流程审批操作,我们可以使用Activiti提供的表单功能。通过表单,用户可以填写审批意见、上传附件等。在代码中,我们可以通过获取表单数据来实现流程的控制逻辑。 最后,我们可以使用Activiti提供的监控功能来查看流程的状态和执行情况。Activiti提供了一个可视化的流程监控控制台,可以实时查看流程实例、任务历史记录等信息。 综上所述,通过Spring Boot整合Activiti,我们可以实现流程审批功能。这使得流程管理更加简单高效,提高了审批流程的可追溯性和可控性。同时,使用Spring Boot的优势,我们可以更加便捷地进行开发和部署。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值