java 工作流 activiti 的集成与应用 附源码

今天给亲们带来一波福利,java 工作流 activiti 的集成  附源码

本章讲解一下

activiti的安装,

自动建表,部署流程定义,

启动流程实例,

查询当前人的个人任务,

完成我的任务,

查询流程定义,

删除流程定义,

查看流程图,

查询最新版本的流程定义,

删除流程定义,

查询流程状态,

查询历史任务,

查询历史流程实例 ,

等等

我用的eclipse 做了一个demo

首先先讲讲 eclipse怎么安装activiti   

由于在线安装比较慢,所以我直接离线安装,稍微快一丢丢

项目源码,和离线文件在此   activiti.rar-Java代码类资源-CSDN下载

第一步:将四个jar包放在安装eclipse的features目录中

第二步:help ==》 install new software  ==》 add

Name:Activiti BPMN 2.0 designer

Location:activiti-designer-5.18.0.zip

第三步:一直点next,同意,重启eclipse有效,安装完成

其次,代码部分

    一:创建表 

方法一:
/**
	 * 使用代码创建工作流的23张表
	 */
	@Test
	public void createTable() {
		ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		
		//连接数据库配置
		processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
		processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8");
		processEngineConfiguration.setJdbcUsername("root");
		processEngineConfiguration.setJdbcPassword("123456");
		
		/*
		public static final String DB_SCHEMA_UPDATE_FALSE = "false"; 不能自动创建表,需要表存在  地址 C:\Users\A556\Downloads\activiti-5.15.1\database\create 
		public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop"; 先删除表再创建表
		public static final String DB_SCHEMA_UPDATE_TRUE = "true"; 如果表不存在 ,自动创建表
		*/
		
		processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
		//工作流的核心对象,ProcessEngine对象
		ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
		System.out.println("processEngine==="+processEngine);
	}


方法2


/**
	 * 使用配置文件  创建工作流的23张表
	 */
	@Test
	public void createTable2() {
		ProcessEngine processEngine= ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
		System.out.println("processEngine==="+processEngine);
	}


    二:绘画流程图

    三:部署流程定义

public void deploymentProcessDefinition() {
		Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
											.createDeployment()//创建一个部署对象
											.name("helloworld入门程序")//添加部署名称
											.addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源加载,一次只能加载一个文件
											.addClasspathResource("diagrams/helloworld.png")//从classpath的资源加载,一次只能加载一个文件
											.deploy();//完成部署
		System.out.println("部署ID:"+deployment.getId());//1
		System.out.println("部署名称:"+deployment.getName());//helloworld入门程序
	}

    四:启动流程实例

public void startProcessInstance() {
		String processDefinitionKey = "helloworld";
		ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的service
										.startProcessInstanceByKey(processDefinitionKey);//使用流程邓毅的key启动流程实例, key对应 helloworld.bpmn文件中id属性值,使用key值启动,默认是按照最新版的流程定义启动
		System.out.println("流程实例ID:"+pi.getId());//流程实例ID   101
		System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID  helloworld:1:4
	}

    五:查询当前人的个人任务

public void findMyPersonalTask() {
		String assignee = "张三";
		List<Task> list = processEngine.getTaskService()//与正在执行的任务管理的相关serveice
					.createTaskQuery()//创建任务查询对象
					
					.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("###################################################################");
			}
		}else {
			System.out.println("没有数据");
		}
	}

    六:完成我的任务

public void completeMyPersonalTask() {
		String taskId = "104";//张三id
		processEngine.getTaskService()//与正在执行的任务管理相关的service
					.complete(taskId);
		System.out.println("完成任务:任务ID:"+taskId);
	}

    七:查看流程图

public void viewPic() throws IOException {
		String deploymentId = "1001";
		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()//与流程定义和部署对象相关的service
					.getResourceAsStream(deploymentId, resourceName);
		
		//将图片生成到D盘的目录下
		File file = new File("D:/"+resourceName);
		//将输入流的图片写到d盘下
		FileUtils.copyInputStreamToFile(in, file);
	}

    八:查询历史任务 

public void findHistoryTask() {
		String taskAssignee = "张三";
		List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表) 相关的service
					.createHistoricTaskInstanceQuery()//创建历史任务实例查询
					.taskAssignee(taskAssignee)//指定历史任务的办理人
					.list();
		if(list!=null && list.size()>0) {
			for(HistoricTaskInstance hti:list) {
				System.out.println("任务id:"+hti.getId());
				System.out.println("名称:"+hti.getName());
				System.out.println("流程实例id:"+hti.getProcessInstanceId());
				System.out.println("开始时间:"+hti.getStartTime());
				System.out.println("结束时间:"+hti.getEndTime());
				System.out.println("毫秒:"+hti.getDurationInMillis());
				System.out.println("###################################################################");
			}
		}else {
			System.out.println("没有");
		}
	}

等等,

最后

好,代码到这里就结束了,如果亲们有什么疑问,欢迎下面评论。欢迎指正。如还有什么不懂的加我 QQ:517861659  

项目源码,和离线文件在此   activiti.rar-Java代码类资源-CSDN下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值