zoukankan      html  css  js  c++  java
  • Activiti-01入门

    Activiti

    项目中有流程审批的需求,为了应对更多需求,决定加入工作流,选用activiti。本篇旨在入门认识

    jar依赖

    本该使用5或者6的版本,这里是为了学习,加的7版本。本该集成springboot的,因其需要springSecurity,故用原始jar

    <properties>
        <activiti.version>7.1.0.M6</activiti.version>
        <activiti.cloud.version>7-201802-EA</activiti.cloud.version>
    </properties>
    

    需要以来的jar

    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-engine</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-model</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-converter</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-json-converter</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-bpmn-layout</artifactId>
        <version>${activiti.version}</version>
    </dependency>
    

    示例

    流程示例图
    简单流程示例
    指定任务名称
    任务名称
    指定任务处理人
    处理人

    如果找不到Properties,Window -> Show View —> Other —> General —> Properties

    测试代码

    @Slf4j
    @RunWith(SpringRunner.class)
    @ActiveProfiles("dev5566")
    @SpringBootTest
    public class ActivitiTest {
    
    	@Autowired
    	ProcessEngineConfiguration configuration;
    
    	/**
    	 * 生成表结构
    	 */
    
    	@Test
    	public void testGenTable() { // 1.创建一个ProcessonEngineConfig对象
    		// 创建 ProcessonEngine 对象 ProcessEngine processEngine =
    		ProcessEngine processEngine = configuration.buildProcessEngine(); // 3.输出测试
    		System.out.println("------------->" + processEngine);
    		log.error("******************>" + processEngine.getName());
    	}
    
    	/**
    	 * 流程部署
    	 */
    	@Test
    	public void testDeployment() {
    		// 创建processEngine对象
    		ProcessEngine processEngine = configuration.buildProcessEngine();
    		// 得到RepositoryService
    		RepositoryService repositoryService = processEngine.getRepositoryService(); // 与流程定义部署相关的service
    		// 进行部署
    		Deployment deployment = repositoryService.createDeployment() // 创建一个对象
    				.addClasspathResource("diagram/aa.bpmn") // 一次只能加载一个文件,加载流程定义
    				.addClasspathResource("diagram/aa.png") // 一次只能加载一个文件,加载图片
    				.name("请假流程") // 起一个名字
    				.deploy(); // 进行部署
    
    		System.out.println("部署ID " + deployment.getId()); // 部署ID 10001
    		System.out.println("部署名称 " + deployment.getName()); // 部署名称 请假流程
    	}
    
    	/**
    	 * 启动流程实例 使用key启动默认是使用流程最新版本的流程定义启动
    	 */
    	@Test
    	public void startProcessTest() {
    		ProcessEngine processEngine = configuration.buildProcessEngine();
    		String processDefinitionKey = "helloworld";
    		ProcessInstance processInstance = processEngine.getRuntimeService() // 与正在执行的流程实例和执行对象相关的service
    				.startProcessInstanceByKey(processDefinitionKey); // 使用流程定义的key启动流程实例.key对应helloworld.bppmn文件中ID的属性值;
    		System.out.println("流程实例ID " + processInstance.getId()); // 流程实例ID 12501
    		System.out.println("流程定义ID " + processInstance.getProcessDefinitionId()); // 流程定义ID helloworld:5:10004
    	}
    
    	/**
    	 * 查询当前个人任务
    	 */
    	@Test
    	public void findMyTaskTest() {
    		ProcessEngine processEngine = configuration.buildProcessEngine();
    		String assignee = "张三";
    		List<Task> list = processEngine.getTaskService() // 和任务相关的service
    				.createTaskQuery() // 创建任务查询对象
    				.taskAssignee(assignee).list(); // 指定个人任务查询.指定办理人
    		if (CollectionUtils.isEmpty(list)) {
    			return;
    		}
    		for (Task task : list) {
    			System.out.println("任务ID " + task.getId()); // 任务ID 12505
    			System.out.println("任务名称 " + task.getName()); // 任务名称 提交请假单
    			System.out.println("任务的创建时间 " + task.getCreateTime()); // 任务的创建时间 Thu Aug 27 11:57:56 CST 2020
    			System.out.println("任务的办理人 " + task.getAssignee()); // 任务的办理人 张三
    			System.out.println("流程实例ID " + task.getProcessInstanceId()); // 流程实例ID 12501
    			System.out.println("流程对象ID " + task.getExecutionId()); // 流程对象ID 12502
    			System.out.println("流程定义ID " + task.getProcessDefinitionId()); // 流程定义ID helloworld:5:10004
    			System.out.println("----------------------------------------------");
    		}
    	}
    
    	/** 完成我的任务 */
    	@Test
    	public void completeMyProcessTask() {
    		ProcessEngine processEngine = configuration.buildProcessEngine();
    		String taskId = "12505";
    		processEngine.getTaskService().complete(taskId);
    		System.out.println("完成任务, 任务ID: " + taskId);
    	}
    	
    	
    	
    	/**
    	 * 查询当前个人任务
    	 */
    	@Test
    	public void findMyTaskTestLiSi() {
    		ProcessEngine processEngine = configuration.buildProcessEngine();
    		String assignee = "李四";
    		List<Task> list = processEngine.getTaskService() // 和任务相关的service
    				.createTaskQuery() // 创建任务查询对象
    				.taskAssignee(assignee).list(); // 指定个人任务查询.指定办理人
    		if (CollectionUtils.isEmpty(list)) {
    			System.out.println(assignee +  "当前没有需要处理的任务");
    			return;
    		}
    		for (Task task : list) {
    			System.out.println("任务ID " + task.getId()); // 任务ID 12505
    			System.out.println("任务名称 " + task.getName()); // 任务名称 提交请假单
    			System.out.println("任务的创建时间 " + task.getCreateTime()); // 任务的创建时间 Thu Aug 27 12:47:26 CST 2020
    			System.out.println("任务的办理人 " + task.getAssignee()); // 任务的办理人 李四
    			System.out.println("流程实例ID " + task.getProcessInstanceId()); // 流程实例ID 12501
    			System.out.println("流程对象ID " + task.getExecutionId()); // 流程对象ID 12502
    			System.out.println("流程定义ID " + task.getProcessDefinitionId()); // 流程定义ID helloworld:5:10004
    			System.out.println("----------------------------------------------");
    		}
    	}
    }
    

    官网Demo下载

    activiti-6.0.0下载

  • 相关阅读:
    2019阿里系电子书合集来了!
    FTP主动模式和被动模式的区别
    Vsftpd运行的两种模式-xinetd运行模式和 standalone模式
    Logstash组件详解(input、codec、filter、output)
    Docker入门-笔记-1
    K8S命令-Kubectl 命令大全
    Nginx-HTTP Strict Transport Security(HSTS)
    IPV6技术笔记(剖析IPv4toIPv6)
    一个交换机到底能带几台摄像头?结合生产经验咱们来分析!
    ELK查询命令详解
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/13570151.html
Copyright © 2011-2022 走看看