首页>代码>ssm+maven+apache shiro+oracle搭建后台用户增删改查实例>/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.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
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 creatTable() {
		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 getProcessEngine() {
		ProcessEngineConfiguration configuration = ProcessEngineConfiguration
				.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
		ProcessEngine engine = configuration.buildProcessEngine();
		System.out.println(engine);
	}

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

	/**
	 * 部署流程定义
	 */
	@Test
	public void deploymentProcessDefinitionZip() {
		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);
	}

	/**
	 * 查询流程
	 */
	@Test
	public void findProcessDefinition() {
		// 可以定义 条件查询
		List<ProcessDefinition> list = engine.getRepositoryService().createProcessDefinitionQuery()
				.orderByDeploymentId().asc().list();
		if (list != null && list.size() > 0) {
			for (ProcessDefinition pf : list) {
				System.out.println(pf);
			}
		}
	}
	/**
	 * 查询最新版本流程
	 */
	@Test
	public void findLastVersionProcess() {
		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 deleteProcessDefinition() {
		// 删除时可以级联删除 (开发时采用级联删除) 不级联的时候 若有启动的流程 删除时报错
		engine.getRepositoryService().deleteDeployment("12501", true);
		System.out.println("删除成功");
	}

	/**
	 * 查看流程图
	 */
	@Test
	public void findView() {
		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 deleteProcessWithKey() {
		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("根据名称删除流程");
	}

	/**
	 * 启动流程实例
	 */
	@Test
	public void startProcessInstance() {
		ProcessInstance instance = engine.getRuntimeService().startProcessInstanceByKey("helloworld");
		System.out.println(instance);

	}

	/**
	 * 查询当前人的任务
	 */
	@Test
	public void findMyProcessTask() {
		// 获取任务的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 comleteMyProcessTask() {
		engine.getTaskService().complete("40004");
		System.out.println("办理完成");
	}
	/**
	 * 判断流程是否结束
	 */
	@Test
	public void isEndProcess() {
		ProcessInstance result = engine.getRuntimeService().createProcessInstanceQuery().processInstanceId("25001")
				.singleResult();
		if (result == null) {
			System.out.println("流程结束了");
		} else {
			System.out.println("流程还在执行");
		}
	}
	/**
	 * 查询历史任务
	 */
	@Test
	public void findHistoryTask() {
		List<HistoricTaskInstance> list = engine.getHistoryService().createHistoricTaskInstanceQuery().taskAssignee("李四").list();
		if(list!=null&&list.size()>0) {
			for (HistoricTaskInstance his : list) {
				System.out.println(his);
			}
		}
		
	}

}
最近下载更多
2398164158  LV3 2023年9月24日
李亮  LV19 2023年3月6日
543666826  LV33 2021年11月19日
erw234  LV2 2021年11月8日
level  LV5 2021年6月10日
小红猪仔  LV4 2021年4月30日
jiugeshidatui  LV2 2020年12月19日
qazzaq123  LV20 2020年11月23日
liang_sen  LV6 2020年10月9日
离沫Winner  LV1 2020年7月28日
最近浏览更多
WBelong  LV8 4月2日
2398164158  LV3 2023年9月24日
siximu912  LV10 2023年7月14日
gecongkai  LV8 2023年6月22日
6389181  LV7 2023年6月14日
微信网友_6260196253601792  LV7 2023年6月8日
25702204  LV1 2023年5月24日
shu1234 2023年5月22日
暂无贡献等级
yeyuuu  LV6 2023年5月18日
3516569014  LV5 2023年5月8日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友