首页>代码>ssm+shiro+maven带权限人力资源管理系统>/ycxm/src/main/java/com/xiaowei/activiti/ActivitiTest.java
package com.xiaowei.activiti;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import org.springframework.util.FileCopyUtils;

public class ActivitiTest {
	ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

	/**
	 * 代码创建表
	 */
	@Test
	public void test1() {
		ProcessEngineConfiguration configuration = ProcessEngineConfiguration
				.createStandaloneProcessEngineConfiguration();
		configuration.setJdbcDriver("com.mysql.jdbc.Driver");
		configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8");
		configuration.setJdbcUsername("root");
		configuration.setJdbcPassword("123456");
		// 创建表 类似hibernate的几种方式
		configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		// 创建流程引擎
		ProcessEngine engine = configuration.buildProcessEngine();
		System.out.println(engine);
	}

	/**
	 * 配置文件创建表
	 */
	@Test
	public void test2() {
		ProcessEngineConfiguration configuration = ProcessEngineConfiguration
				.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
		ProcessEngine engine = configuration.buildProcessEngine();
		System.out.println(engine);
	}

	/**
	 * 部署流程定义(act_re_deployment,act_re_procdef,act_ge_bytearray)
	 */
	@Test
	public void test3() {
		// 获取流程引擎
		// 获取与数据库相关的Service
		RepositoryService service = engine.getRepositoryService();
		// 创建并获取部署对象
		Deployment deploy = service.createDeployment().name("请假流程")
				.addClasspathResource("ProcessFile/leaveProcess.bpmn")
				.addClasspathResource("ProcessFile/leaveProcess.png").deploy();
		System.out.println("部署成功 deploy: " + deploy);
	}

	/**
	 * 部署流程定义(zip方式)
	 * (act_re_deployment,act_re_procdef,act_ge_bytearray)
	 */
	@Test
	public void test4() {
		InputStream in = this.getClass().getClassLoader().getResourceAsStream("ProcessFile/hello.zip");
		ZipInputStream zipInputStream = new ZipInputStream(in);
		Deployment deploy = engine.getRepositoryService().createDeployment().name("请假流程")
				.addZipInputStream(zipInputStream).deploy();
		System.out.println(deploy);
	}

	/**
	 * 查询流程定义  (act_re_procdef)
	 */
	@Test
	public void test5() {
		// 可以定义 条件查询
		RepositoryService repositoryService = engine.getRepositoryService();
		ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
		List<ProcessDefinition> list = query.processDefinitionKey("leave_process").list();
		for (ProcessDefinition pd : list) {
			System.out.println(pd.getName());
		}
	}

	/**
	 * 查询最新版本流程
	 */
	@Test
	public void test6() {
		List<ProcessDefinition> list = engine.getRepositoryService().createProcessDefinitionQuery()
				.orderByProcessDefinitionVersion().asc().list();
		Map<String, ProcessDefinition> map = new LinkedHashMap<>();
		if (list != null && list.size() > 0) {
			for (ProcessDefinition pf : list) {
				map.put(pf.getKey(), pf);
			}
		}
		List<ProcessDefinition> list2 = new ArrayList<>(map.values());
		if (list2 != null && list2.size() > 0) {
			for (ProcessDefinition pd : list2) {
				System.out.println(pd);
			}
		}
	}

	/**
	 * 删除流程定义
	 */
	@Test
	public void test7() {
		// 删除时可以级联删除 (开发时采用级联删除) 不级联的时候 若有启动的流程 删除时报错
		engine.getRepositoryService().deleteDeployment("12501", true);
		System.out.println("删除成功");
	}

	/**
	 * 查看流程图
	 */
	@Test
	public void test8() {
		List<String> list = engine.getRepositoryService().getDeploymentResourceNames("20001");
		String resource = "";
		if (list != null && list.size() > 0) {
			for (String name : list) {
				if (name.indexOf(".png") >= 0) {
					resource = name;
				}
			}
		}
		InputStream inputStream = engine.getRepositoryService().getResourceAsStream("20001", resource);
		File file = new File("F:\\workspace\\ycxm01\\src\\test\\resources" + resource);
		OutputStream out;
		try {
			out = new FileOutputStream(file);
			FileCopyUtils.copy(inputStream, out);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 根据流程的key删除流程定义
	 */
	@Test
	public void test9() {
		List<ProcessDefinition> list = engine.getRepositoryService().createProcessDefinitionQuery()
				.processDefinitionKey("helloworld").list();
		if (list != null && list.size() > 0) {
			for (ProcessDefinition pd : list) {
				String id = pd.getDeploymentId();
				engine.getRepositoryService().deleteDeployment(id, true);
			}
		}
		System.out.println("根据名称删除流程");
	}

	/**
	 * 启动流程实例
	 * act_ru_execution
	 * act_ru_identitylink(身份信息相关)
	 * act_ru_task
	 */
	@Test
	public void test10() {
		RuntimeService runtimeService = engine.getRuntimeService();
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave_process");
		System.out.println(processInstance);
	}

	/**
	 * 查询当前人的任务
	 */
	@Test
	public void test11() {
		// 获取任务的service
		TaskService taskService = engine.getTaskService();
		// 获取 代理人任务集合
		List<Task> list = taskService.createTaskQuery().taskAssignee("王五").list();
		if (list != null && list.size() > 0) {
			for (Task task : list) {
				System.out.println(task);
			}
		}
	}

	/**
	 * 办理当前任务
	 */
	@Test
	public void test12() {
		TaskService taskService = engine.getTaskService();
		taskService.complete("12502");
		System.out.println("办理完成");
	}

	/**
	 * 判断流程是否结束
	 */
	@Test
	public void test13() {
		ProcessInstance result = engine.getRuntimeService().createProcessInstanceQuery().processInstanceId("12502")
				.singleResult();
		if (result == null) {
			System.out.println("流程结束了");
		} else {
			System.out.println("流程还在执行");
		}
	}

	/**
	 * 查询历史任务
	 */
	@Test
	public void test14() {
		List<HistoricTaskInstance> list = engine.getHistoryService().createHistoricTaskInstanceQuery()
				.taskAssignee("李四").list();
		if (list != null && list.size() > 0) {
			for (HistoricTaskInstance his : list) {
				System.out.println(his);
			}
		}

	}

}
最近下载更多
2578193624  LV2 2024年6月17日
Huangjy2157  LV2 2023年12月26日
微信网友_6602457430806528  LV6 2023年9月21日
19137715150  LV1 2023年6月18日
sjl821120  LV6 2023年6月10日
yunYUN123  LV1 2023年5月18日
qq2901732871  LV9 2023年4月7日
duoer12  LV5 2022年12月30日
tbwy2014  LV5 2022年10月24日
二十一画  LV10 2022年4月30日
最近浏览更多
黄志琴  LV1 前天
xianyu091012  LV5 2024年12月26日
wjh007  LV5 2024年9月12日
李朝磊  LV18 2024年6月28日
2578193624  LV2 2024年6月16日
ma406805131  LV19 2024年6月15日
qwe6002  LV10 2024年5月24日
李俊雄  LV3 2024年5月8日
WBelong  LV8 2024年4月2日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友