springboot-actitvti工作流demo记录

首先导入jar包,这个网上多得是。,然后使用@Autowired完成自动装配
demo前提是已经生成bpmn文件和png流程图。

	@Autowired
	private ProcessEngine processEngine;
	@Autowired
	private TaskService taskService;
	@Autowired
	private RuntimeService runtimeService;
	@Autowired
	private HistoryService historyService;
	**********************************发布流程*************************************
		// 1 发布流程
		InputStream inputStreamBpmn = this.getClass().getClassLoader().getResourceAsStream("bpmn/demo001.bpmn");
		InputStream inputStreamPng = this.getClass().getClassLoader().getResourceAsStream("bpmn/demo001.png");
		processEngine.getRepositoryService()
				.createDeployment()
				.addInputStream("demo001.bpmn", inputStreamBpmn)
				.addInputStream("demo001.png", inputStreamPng)
				.deploy();

		ProcessInstance pi = processEngine.getRuntimeService()
				.startProcessInstanceByKey("demo001");
		System.out.println("pid:" + pi.getId());
		**************************部署流程***********************************
		//部署流程定义方法-1
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
				.createDeployment()//创建一个部署对象
				.name("流程定义")//添加部署的名称
				.addClasspathResource("bpmn/demo001.bpmn")//从classpath的资源中加载,一次只能加载一个文件
				.addClasspathResource("bpmn/demo001.png")//从classpath的资源中加载,一次只能加载一个文件
				.deploy();//完成部署

		//部署流程定义方法-2
			InputStream in = this.getClass().getClassLoader().getResourceAsStream("bpmn/hello.zip");
			ZipInputStream zipInputStream = new ZipInputStream(in);
			Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
				.createDeployment()//创建一个部署对象
				.name("流程定义")//添加部署的名称
				.addZipInputStream(zipInputStream)//指定zip格式的文件完成部署
				.deploy();//完成部署

		System.out.println("部署ID:"+deployment.getId());
		System.out.println("部署名称:"+deployment.getName());
       *****************************查询流程定义*********************************

		List<ProcessDefinition> list = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
				.createProcessDefinitionQuery()//创建一个流程定义的查询
				*//**指定查询条件,where条件*//*
//                      .deploymentId(deploymentId)//使用部署对象ID查询
//                      .processDefinitionId(processDefinitionId)//使用流程定义ID查询
//                      .processDefinitionKey(processDefinitionKey)//使用流程定义的key查询
//                      .processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询

				*//**排序*//*
				.orderByProcessDefinitionVersion().asc()//按照版本的升序排列
//                      .orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列

				*//**返回的结果集*//*
				.list();//返回一个集合列表,封装流程定义
//                      .singleResult();//返回惟一结果集
//                      .count();//返回结果集数量
//                      .listPage(firstResult, maxResults);//分页查询
		if(list!=null && list.size()>0){
			for(ProcessDefinition pd:list){
				System.out.println("流程定义ID:"+pd.getId());//流程定义的key+版本+随机生成数
				System.out.println("流程定义的名称:"+pd.getName());//对应hello.bpmn文件中的name属性值
				System.out.println("流程定义的key:"+pd.getKey());//对应hello.bpmn文件中的id属性值
				System.out.println("流程定义的版本:"+pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
				System.out.println("资源名称bpmn文件:"+pd.getResourceName());
				System.out.println("资源名称png文件:"+pd.getDiagramResourceName());
				System.out.println("部署对象ID:"+pd.getDeploymentId());
				System.out.println("*********************************************");
			}
		}
		***********************************删除流程定*************************************

		//使用部署ID,完成删除,指定部署对象id为2501删除
		String deploymentId = "10001";
		*//**
		 * 不带级联的删除
		 *    只能删除没有启动的流程,如果流程启动,就会抛出异常
		 *//*
//      processEngine.getRepositoryService()//
//                      .deleteDeployment(deploymentId);

		*//**
		 * 级联删除
		 *    不管流程是否启动,都能可以删除
		 *//*
		processEngine.getRepositoryService()//
				.deleteDeployment(deploymentId, true);
		System.out.println("删除成功!");*/
		**********************查看流程图(下载流程图)******************
		/**将生成图片放到文件夹下*/
		String deploymentId = "15001";
		//获取图片资源名称
		List<String> list = processEngine.getRepositoryService()//
				.getDeploymentResourceNames(deploymentId);
		//定义图片资源的名称
		String resourceName = "";
		if (list != null && list.size() > 0) {
			for (String name : list) {
				if (name.indexOf(".png") >= 0) {
					resourceName = name;
				}
			}
		}

		//获取图片的输入流
		InputStream in = processEngine.getRepositoryService()//
				.getResourceAsStream(deploymentId, resourceName);

		//将图片生成到F盘的目录下
		File file = new File("F:/" + resourceName);

		//将输入流的图片写到磁盘
		try{
			FileUtils.copyInputStreamToFile(in, file);
		}catch (Exception e){

		}
	***************************查询最新版本的流程定义*******************************
		List<ProcessDefinition> list = processEngine.getRepositoryService()//
				.createProcessDefinitionQuery()//
				.orderByProcessDefinitionVersion().asc()//使用流程定义的版本升序排列
				.list();
		*//**
		 map集合的特点:当map集合key值相同的情况下,后一次的值将替换前一次的值
		 *//*
		Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
		if (list != null && list.size() > 0) {
			for (ProcessDefinition pd : list) {
				map.put(pd.getKey(), pd);
			}
		}
		List<ProcessDefinition> pdList = new ArrayList<ProcessDefinition>(map.values());
		if (pdList != null && pdList.size() > 0) {
			for (ProcessDefinition pd : pdList) {
				System.out.println("流程定义ID:" + pd.getId());//流程定义的key+版本+随机生成数
				System.out.println("流程定义的名称:" + pd.getName());//对应hello.bpmn文件中的name属性值
				System.out.println("流程定义的key:" + pd.getKey());//对应hello.bpmn文件中的id属性值
				System.out.println("流程定义的版本:" + pd.getVersion());//当流程定义的key值相同的相同下,版本升级,默认1
				System.out.println("资源名称bpmn文件:" + pd.getResourceName());
				System.out.println("资源名称png文件:" + pd.getDiagramResourceName());
				System.out.println("部署对象ID:" + pd.getDeploymentId());
				System.out.println("*********************************************************************************");
			}
		}
		****************************启动流程实例*******************************

		//1、流程定义的key,通过这个key来启动流程实例
		String processDefinitionKey = "demo001";
		//2、与正在执行的流程实例和执行对象相关的Service
		// startProcessInstanceByKey方法还可以设置其他的参数,比如流程变量。
		ProcessInstance pi = processEngine.getRuntimeService()
				.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
		System.out.println("流程实例ID:"+pi.getId());//流程实例ID
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID
		***************************查询当前人的个人任务*********************************

		String assignee = "sihai";
		List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
				.createTaskQuery()//创建任务查询对象
				*//**查询条件(where部分)*//*
				.taskAssignee(assignee)//指定个人任务查询,指定办理人
//                      .taskCandidateUser(candidateUser)//组任务的办理人查询
//                      .processDefinitionId(processDefinitionId)//使用流程定义ID查询
//                      .processInstanceId(processInstanceId)//使用流程实例ID查询
//                      .executionId(executionId)//使用执行对象ID查询
				*//**排序*//*
				.orderByTaskCreateTime().asc()//使用创建时间的升序排列
				*//**返回结果集*//*
//                      .singleResult()//返回惟一结果集
//                      .count()//返回结果集的数量
//                      .listPage(firstResult, maxResults);//分页查询
				.list();//返回列表
		if(list!=null && list.size()>0){
			for(Task task:list){
				System.out.println("任务ID:"+task.getId());
				System.out.println("任务名称:"+task.getName());
				System.out.println("任务的创建时间:"+task.getCreateTime());
				System.out.println("任务的办理人:"+task.getAssignee());
				System.out.println("流程实例ID:"+task.getProcessInstanceId());
				System.out.println("执行对象ID:"+task.getExecutionId());
				System.out.println("流程定义ID:"+task.getProcessDefinitionId());
				System.out.println("********************************************");
			}
		}
		****************************办理个人任务(根据任务ID)*************************
		//任务ID,上一步查询得到的。
		String taskId = "25005";
		processEngine.getTaskService()//与正在执行的任务管理相关的Service
				.complete(taskId);
		System.out.println("完成任务:任务ID:" + taskId);
		System.out.println("********************************************");
		***************查询流程状态(判断流程走到哪一个节点)*************************
		String processInstanceId = "20005";
		ProcessInstance pi = processEngine.getRuntimeService()//表示正在执行的流程实例和执行对象
				.createProcessInstanceQuery()//创建流程实例查询
				.processInstanceId(processInstanceId)//使用流程实例ID查询
				.singleResult();
		Task task = processEngine.getTaskService().createTaskQuery().processInstanceId("20005").singleResult();
		if (pi == null) {
			System.out.println("流程已经结束");
		} else {
			System.out.println("流程没有结束");
			//获取任务状态
			System.out.println("节点id:" + task.getTaskDefinitionKey());
			System.out.println("审批人:" + task.getAssignee());
		}
		*************************历史活动查询接口**********************************

		String processInstanceId = "25001";
		List<HistoricActivityInstance> hais = processEngine.getHistoryService()//
				.createHistoricActivityInstanceQuery()
				.processInstanceId(processInstanceId)
				.list();
		for (HistoricActivityInstance hai : hais) {
			System.out.println("活动id:" + hai.getTaskId()
					+ "   审批人:" + hai.getAssignee()
					+ "   任务id:" + hai.getExecutionId());
			System.out.println("************************************");
		}
		/**查询历史流程实例(实例创建后就有历史记录)*/
		HistoricProcessInstance hpi = processEngine.getHistoryService()// 与历史数据(历史表)相关的Service
				.createHistoricProcessInstanceQuery()// 创建历史流程实例查询
				.processInstanceId(processInstanceId)// 使用流程实例ID查询
				.orderByProcessInstanceStartTime().asc().singleResult();
		System.out.println(hpi.getId() + "    " + hpi.getProcessDefinitionId() + "    " + hpi.getStartTime() + "    "
				+ hpi.getEndTime() + "     " + hpi.getDurationInMillis());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值