• userTask
    • mainconfig->assignee
  • sequenceFlow->mainconfig->Condition->${user=='libai'}| ${day>=10}
package com.osvue.bpmn.activitiapp.bpmn.sequence;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

/**
 * 
 * @author THE GIFTED
 *
 */
public class TestSequenceFlow {
	ProcessEngine proe = ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程
	 */
	@Test
	public void deployProcess() {
		// 如果不加/代表从当前包里面找文件
		InputStream inputStream = this.getClass().getResourceAsStream("/diagrams/sec/sec.zip");
		// 如果加/代表从classpath的根目录里面找文件
 		 
		RepositoryService repositoryService = proe.getRepositoryService();
		ZipInputStream zipInputStream = new ZipInputStream(inputStream);
		Deployment deploy = repositoryService.createDeployment().name("qingjia流程001").addZipInputStream(zipInputStream)// 添加流程图的流
				.deploy(); 
		System.out.println("部署成功,部署D:" + deploy.getId());
		
		 
	}
	
	/**
	 * 启动流程
	 */
	@Test
	public void startProcess() {
		RuntimeService runtimeService = proe.getRuntimeService();
//		runtimeService.startProcessInstanceById(processDefinitionId)//根据流程定义ID启动流程
 
		String processDefinitionKey = "live_bill";
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
		System.out.println("流程启动成功:" + processInstance.getId() + "   " + processInstance.getProcessDefinitionId() + "  "
				+ processInstance.getProcessInstanceId());

	}
	/**
	 * 查询个人任务
	 */
	@Test
	public void queryMyTask() {
		TaskService taskService = proe.getTaskService();
		 	String assignee = "李四";
		 // String assignee = "张三";
		List<org.activiti.engine.task.Task> list = taskService.createTaskQuery()
				// 条件
				.taskAssignee(assignee)// 根据任务办理人查询任务
 
				.orderByTaskCreateTime().desc()
				// 结果集
				.list();
//		.listPage(firstResult, maxResults)
//		.count();
//		.singleResult()

		if (null != list && list.size() > 0) {
			for (Task task : list) {
				System.out.println("任务ID:" + task.getId());
				System.out.println("任务办理人:" + task.getAssignee());
				System.out.println("执行实例ID:" + task.getExecutionId());
				System.out.println("任务名称:" + task.getName());
				System.out.println("流程定义ID:" + task.getProcessDefinitionId());
				System.out.println("流程实例ID:" + task.getProcessInstanceId());
				System.out.println("任务创建时间:" + task.getCreateTime());
				System.out.println("####################");
			}
		}
	}
	
	/**
	 * 办理任务 
	 * <b>不使用 流程变量</b>
	 */
	@Test
	public void completeTask() {
		TaskService taskService = proe.getTaskService();
		String taskId = "50003";
		// 根据任务ID去完成任务
		taskService.complete(taskId);
		// 根据任务ID去完成任务并指定流程变量
//		taskService.complete(taskId, variables);
		System.out.println("任务完成");
	}
	
	/**
	 * 办理任务 并 带上 条件 变量
	 * <p>
	 * 	Condition
	 		${day == 3} >= <= 
	 		return boolean
	  </p>
	 */
	@Test
	public void completeTaskForVariable() {
		TaskService taskService = proe.getTaskService();
		String taskId = "42504";
	 
		Map<String, Object> variables = new HashMap<>();
		variables.put("day", 121);
		// 根据任务ID去完成任务并指定流程变量
 		taskService.complete(taskId, variables );
		System.out.println("任务完成");
	}
	
	
	
}

  1. 一个活动中可以指定一个或多个SequenceFlow(Start中有一个,End中没有)。
  • 开始活动中有一个SequenceFlow 。
  • 结束活动中没有SequenceFlow 。
  • 其他活动中有1条或多条SequenceFlow
  1. 如果只有一个,则可以不使用流程变量设置codition的名称;
    1. 如果有多个,则需要使用流程变量设置codition的名称。message表示流程变量的名称,‘不重要’表示流程变量的值
    2. ${}中间的内容要使用boolean类型的表达式,用来判断应该执行的连线
    3. ${message == '不重要'}