package activitiTest;

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

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

/**
 * activiti基础操作
 */
public class ActTest_jichucaozuo {
	// ProcessEngines.getDefaultProcessEngine()会在第一次调用时
	// 初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎。
	// 使用对应的方法可以创建和关闭所有流程引擎:ProcessEngines.init() 和
	// ProcessEngines.destroy()。
	private ProcessEngine processEngine = ProcessEngines
			.getDefaultProcessEngine();

	/**
	 * 简单非空判断
	 *
	 * @author:tuzongxun
	 * @Title: isEmpty
	 * @param @return
	 * @return boolean
	 * @date Feb 29, 2016 12:55:15 PM
	 * @throws
	 */
	public boolean isEmpty(Object object) {
		if (object instanceof List) {
			List list = (List) object;
			if (list != null && list.size() > 0) {
				return false;
			} else {
				return true;
			}

		} else {
			if (object != null) {
				return false;
			} else {
				return true;
			}
		}
	}

	/**
	 * 部署流程定义(发布流程)
	 *
	 * @author:tuzongxun
	 * @Title: actDeployement
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:23:48 PM
	 * @throws
	 */
	public void actDeployement() {
		// 使用zip文件形式部署流程定义
		InputStream inputStream = this.getClass().getClassLoader()
				.getResourceAsStream("actTest1.zip");
		ZipInputStream zipInputStream = new ZipInputStream(inputStream);
		processEngine.getRepositoryService().createDeployment()
				.name("activiti测试").addZipInputStream(zipInputStream).deploy();
	}

	/**
	 * 删除流程定义
	 *
	 * @author:tuzongxun
	 * @Title: deleteDeployement
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:36:15 PM
	 * @throws
	 */
	public void deleteDeployement() {
		List<Deployment> lists = processEngine.getRepositoryService()
				.createDeploymentQuery().list();
		if (!isEmpty(lists)) {
			for (Deployment deployment : lists) {
				processEngine.getRepositoryService().deleteDeployment(
						deployment.getId());
			}
		}

	}

	/**
	 * 启动流程实例
	 *
	 * @author:tuzongxun
	 * @Title: startProcessInstance
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:30:06 PM
	 * @throws
	 */
	public void startProcessInstance() {
		// 这里根据流程定义的key启动,也可以根据id,还可以在启动的时候加入流程变量,
		// 启动流程实例后会获得一个任务task,这里是在流程图中已经写死了任务所有者是张三,因此启动的时候会创建一个任务给张三
		String processDefinitionKey = "myProcess";
		processEngine.getRuntimeService().startProcessInstanceByKey(
				processDefinitionKey);
	}

	/**
	 * 查询当前活动的流程实例
	 *
	 * @author:tuzongxun
	 * @Title: findCurrentProInstance
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:53:04 PM
	 * @throws
	 */
	public void findCurrentProInstance() {
		List<ProcessInstance> lists = processEngine.getRuntimeService()
				.createProcessInstanceQuery().list();
		if (!isEmpty(lists)) {
			for (ProcessInstance processInstance : lists) {
				System.out.println(processInstance.getId());
			}
		}
	}

	/**
	 * 查询个人任务及相关信息
	 *
	 * @author:tuzongxun
	 * @Title: findMyTask
	 * @param
	 * @return void
	 * @date Feb 29, 2016 12:50:05 PM
	 * @throws
	 */
	public void findMyTask() {
		// String userName = "张三";
		String userName = "李四";
		List<Task> lists = processEngine.getTaskService().createTaskQuery()
				.taskAssignee(userName).list();
		if (!isEmpty(lists)) {
			for (Task task : lists) {
				System.out.println(task.getId() + "," + task.getName() + ","
						+ task.getAssignee() + "," + task.getCreateTime());
			}
		}
	}

	/**
	 * 完成个人任务
	 *
	 * @author:tuzongxun
	 * @Title: endMyTask
	 * @param
	 * @return void
	 * @date Feb 29, 2016 1:17:21 PM
	 * @throws
	 */
	public void endMyTask() {
		String taskId = "5002";
		processEngine.getTaskService().complete(taskId);
	}

	/**
	 * 查询历史流程实例
	 *
	 * @author:tuzongxun
	 * @Title: findHisProInstance
	 * @param
	 * @return void
	 * @date Feb 29, 2016 2:09:14 PM
	 * @throws
	 */
	public void findHisProInstance() {
		List<HistoricProcessInstance> lists = processEngine.getHistoryService()
				.createHistoricProcessInstanceQuery().list();
		if (!isEmpty(lists)) {
			for (HistoricProcessInstance hisPro : lists) {
				System.out.println(hisPro.getId() + "," + hisPro.getStartTime()
						+ "," + hisPro.getEndTime());
			}
		}
	}

	/**
	 * 查询历史任务列表
	 *
	 * @author:tuzongxun
	 * @Title: findHisTask
	 * @param
	 * @return void
	 * @date Feb 29, 2016 2:13:05 PM
	 * @throws
	 */
	public void findHisTask() {
		List<HistoricTaskInstance> lists = processEngine.getHistoryService()
				.createHistoricTaskInstanceQuery().list();
		if (!isEmpty(lists)) {
			for (HistoricTaskInstance hisTask : lists) {
				System.out.println(hisTask.getId() + ","
						+ hisTask.getAssignee() + "," + hisTask.getName() + ","
						+ hisTask.getStartTime() + "," + hisTask.getEndTime());
			}
		}
	}
}

activiti基础操作的更多相关文章

  1. python基础操作以及hdfs操作

    目录 前言 基础操作 hdfs操作 总结 一.前言        作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...

  2. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  3. 【Learning Python】【第二章】Python基础类型和基础操作

    基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...

  4. Emacs学习心得之 基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...

  5. Git基础操作

    配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...

  6. 推荐csdn里的几篇activiti基础入门及提高的博客

    昨天有个网友加qq询问我有没有非maven搭建的activiti项目的demo,因为我博客中写了一个用maven,我当时没有,于是晚上回家尝试了一下,结果比较容易就实现了. 之后和那个网友聊了一下,他 ...

  7. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:基础操作篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D基础操作   第一课<G3D编辑器初探> G3D编辑器介绍,依托于一个复杂场景,讲解了场景视图及其基本操作,属性面板和工具栏的 ...

  8. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

  9. php之文件基础操作

    在php中对文件的基础操作非常的简单,php提供的函数粗略的用了一遍. file_get_contents():可以获取文件的内容获取一个网络资源的内容,这是php给我封装的一个比较快捷的读取文件的内 ...

随机推荐

  1. C专家编程学习 1

    1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x)   #define a ...

  2. 使用GoodFeaturesToTrack进行关键点检测---29

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 关键点:是多个方向上亮度变化强的区域. opencv:版本是2.4. 侦测器:opencv有大量的关键点 ...

  3. c#---部分;把数组或者结构体存入集合里,然后再从集合中取出之后,输出;foreach既可以用到提取数组重点额数据,也可以提取集合中的数据(前提是集合中的元素是相同数据类型)

    1.输入班级人数,统计每个人的姓名,性别,年龄:集合与数组 //Console.Write("请输入班级人数:"); //int a = int.Parse(Console.Rea ...

  4. linux 命令查看CPU和内存信息

    几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核(假设cpu配置相同) more /proc/cpu ...

  5. 织梦DedeCMS"当前位置"去除最后一个 > 符号的方法

    首先找到根目录下面的include 目录,然后找到 typelink.class.php 文件, 再查找到 GetPositionLink 方法 下面的 return $this->valueP ...

  6. Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒

    http://www.51itong.net/android-badgenumber-9789.html Android系统 小米/三星/索尼 应用启动图标未读消息数(BadgeNumber)动态提醒 ...

  7. C++@冒号(:)和双冒号(::)的用法

    转自:http://blog.csdn.net/zimingjushi/article/details/6549390 1.冒号(:)用法 (1)表示机构内位域的定义(即该变量占几个bit空间) ty ...

  8. (转)TensorFlow 入门

        TensorFlow 入门 本文转自:http://www.jianshu.com/p/6766fbcd43b9 字数3303 阅读904 评论3 喜欢5 CS224d-Day 2: 在 Da ...

  9. Questions?

    http://www.datastax.com/wp-content/themes/datastax-2014-08/files/NoSQL_Benchmarks_EndPoint.pdf http: ...

  10. mysql optimization

    EXPLAIN 命令详解 http://www.cnblogs.com/gomysql/p/3720123.html http://www.cnblogs.com/Aiapple/p/5697229. ...