Spring Boot 如何实现activiti工作流

本文介绍了如何在Spring Boot 2.0项目中集成Activiti 5.2.1实现工作流。主要内容包括配置流程图路径、引入依赖、创建processes文件夹,以及使用Eclipse的Activiti插件绘制流程图。通过实例讲解了流程的各个环节配置,如项目经理审批、人事经理审批,并展示了相关代码实现,包括工作处理类、控制层、业务逻辑处理和数据库操作。最后提到了启动流程和查看流程图的页面代码,以及启动类的配置修改。
摘要由CSDN通过智能技术生成

功能简介

Spring Boot 使用Activiti 工作流,其实只需要配置下bpmn文件的路径即可,让Spring Boot扫描到后将流程节点信息入库,这次为大家介绍的是Spring Boot 2.0 + Activiti 5.2.1,因为Activiti低版本的需要手动部署BPMN资源文件,5.2.X之后的版本不需要手动部署。

现有Springboot项目搭建

maven的引用

在配置文件中加入Activiti的配置,并且新建processes文件夹。


接下来我们就要用Eclipse工具安装Activiti的插件,进行流程图的绘制。
可以参考这位博主的博客:
https://blog.csdn.net/ka_ka314/article/details/79431197
安装完成后我们就可以进行绘制流程图了,这个是我画的一个Demo,如下:

流程图绘制好了,接下来就是流程的属性配置了,我们先看第一个环节,
项目经理审批:


我们都知道流程图只是展示当前流程的环节,以及当前流程的进度情况。我们看到Main Config这个是主要配置,
员工填写完了请假信息后,然后提交到项目经理审批时,是不是得知道提交给谁,所以就要根据员工的部门ID查找当前部门的项目经理,所以就需要调用我们自己写的方法,然后将项目经理信息返回。

我们看下网关的属性配置,属性audit是我们代码中定义的属性,代码中将audit赋予不同的值,当然值必须是图中的,它才会根据值的不同,进行流程的推进。
通过:

拒绝:

人事经理审批:

通过:

这里我没有写拒绝,通过后就结束了。

图中的用到的方法都在下面的代码中:

工作处理类

package com.jeesite.modules.activiti.common;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngineConfiguration;
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.history.HistoricTaskInstance;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.context.Context;
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.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.activiti.image.ProcessDiagramGenerator;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.jeesite.modules.activiti.dao.ActivitiMapper;
import com.jeesite.modules.utils.StrUtils;

/**
 * @Desc 工作流程公共类
 * @author pgqing
 * @Version 5.2.1
 */
@Service
public class activitiCommonService {

	@Resource
	private RuntimeService runtimeService;

	@Resource
	private TaskService taskService;

	@Resource
	private HistoryService historyService;

	@Resource
	private RepositoryService repositoryService;

	@Resource
	private ManagementService managementService;

	@Autowired
	private ProcessEngineFactoryBean processEngine;


	@Resource
	private ProcessEngineConfiguration processEngineConfiguration;

	@Resource
	private ActivitiMapper mapper;

	/**
	 * 启动流程
	 * 
	 * @param processDefinitionKey
	 */
	public void startProcess(String processDefinitionKey, String bizKey) {
		runtimeService.startProcessInstanceByKey(processDefinitionKey, bizKey);
	}

	/**
	 * 审批
	 * 
	 * @param taskId 流程ID
	 * @param userId 审批人
	 * @param audit  审批意见(通过:pass,拒绝:refund)
	 */
	public String completeTaskByUser(String taskId, String userId, String audit, String comment) {
		// 根据taskId查询流程ID
		String processInstanceId = mapper.queryProcessIdByTaskId(taskId);
		if (null != processInstanceId && !"".equals(processInstanceId)) {
			// 1.认领任务
			taskService.claim(taskId, userId);
			// 2.添加备注(保存建议)
			taskService.addComment(taskId, processInstanceId, comment);
			// 3.完成任务
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("audit", audit);
			taskService.complete(taskId, map);
		}
		return "审批完成";
	}

	/**
	 * @DESC 根据用户ID查询待办事项
	 * @param userId
	 * @return
	 */
	public List<Task> findTaskByUserId(String userId) {
		return taskService.createTaskQuery().taskCandidateOrAssigned(userId).list();
	}
	
	/**
	 * @Desc 根据用户和流程名称获取任务列表(待办、已办)
	 * @param us
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟特工007

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

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

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

打赏作者

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

抵扣说明:

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

余额充值