Activiti的简单入门例子(经典的请假例子)

经典的请假例子:

流程如下,首先需要部门经理审批,如果请假天数大于2天,则需要总经理审批,否则HR审批即可

一:创建maven项目,项目结构如下:

加入依赖

pom.xml

<dependency>
	<groupId>org.activiti</groupId>
	<artifactId>activiti-engine</artifactId>
	<version>5.17.0</version>
</dependency>
<dependency>
	<groupId>org.activiti</groupId>
	<artifactId>activiti-bpmn-layout</artifactId>
	<version>5.17.0</version>
</dependency>
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<version>9.3-1103-jdbc41</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.7.12</version>
</dependency>

activiti.cfg.xml

数据库使用postgresql

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="databaseSchemaUpdate" value="drop-create"/>
        <property name="jdbcUrl" value="jdbc:postgresql://127.0.0.1/db_cloud"/>
        <property name="jdbcDriver" value="org.postgresql.Driver"/>
        <property name="jdbcUsername" value="admin"/>
        <property name="jdbcPassword" value="root"/>
        <property name="jobExecutorActivate" value="true"/>
    </bean>
</beans>

流程文件leave.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
	xmlns:activiti="http://activiti.org/bpmn" targetNamespace="Examples"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL
             http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">

	<process id="leave_process" name="某公司请假流程">
		<startEvent id="leave" name="请假申请"></startEvent>

		<userTask id="dept_manager" name="部门经理审批"></userTask>
		<userTask id="boss" name="总经理审批"></userTask>
		<userTask id="hr" name="HR审批"></userTask>
		<sequenceFlow id="flow1" sourceRef="leave" targetRef="dept_manager"></sequenceFlow>
		<sequenceFlow id="flow2" sourceRef="dept_manager" targetRef="boss">
			<conditionExpression xsi:type="tFormalExpression"><![CDATA[${day >= 3}]]></conditionExpression>
		</sequenceFlow>
		<sequenceFlow id="flow3" sourceRef="boss" targetRef="hr"></sequenceFlow>
		<sequenceFlow id="flow4" sourceRef="dept_manager" targetRef="hr">
			<conditionExpression xsi:type="tFormalExpression"><![CDATA[${day < 3}]]></conditionExpression>
		</sequenceFlow>
		<sequenceFlow id="flow5" sourceRef="hr" targetRef="end"></sequenceFlow>

		<endEvent id="end" name="结束"></endEvent>
	</process>

</definitions>

流程图如下:

二:代码演示

Leave.java

package com.lala.activiti;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;

public class Leave
{
	static void log(Object obj)
    {
    	System.out.println(obj);
    }

	static void run(ProcessEngine processEngine) throws Exception
	{
		RepositoryService repositoryService = processEngine.getRepositoryService();

        repositoryService.createDeployment().addClasspathResource("leave.bpmn20.xml").deploy();

        RuntimeService runtimeService = processEngine.getRuntimeService();

        Map<String, Object> variables = new HashMap<>();
        variables.put("userid", "10010");
        variables.put("day", 3);

        runtimeService.startProcessInstanceByKey("leave_process", variables);

        TaskService taskService = processEngine.getTaskService();

        TaskQuery query = taskService.createTaskQuery();

        List<Task> tasks = query.list();

        for(Task task : tasks)
        {
        	log(task.getId() + "," + task.getName());
        	taskService.complete(task.getId(), variables);
        }

        log("--------------------");

        tasks = query.list();

        for(Task task : tasks)
        {
        	log(task.getId() + "," + task.getName());
        	taskService.complete(task.getId(), variables);
        }

        log("--------------------");

        tasks = query.list();

        for(Task task : tasks)
        {
        	log(task.getId() + "," + task.getName());
        	taskService.complete(task.getId(), variables);
        }
	}
	public static void main(String[] args)
	{
		ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();

		try {
			run(processEngine);
		} catch (Exception e) {
			e.printStackTrace();
		}

		processEngine.close();
	}
}

variables.put("day", 3);

大于等于3的时候,输出

9,部门经理审批

--------------------

11,总经理审批

--------------------

13,HR审批

否则,输出

9,部门经理审批

--------------------

11,HR审批

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 14:48:13

Activiti的简单入门例子(经典的请假例子)的相关文章

Activiti的简单入门样例(经典的请假样例)

经典的请假样例: 流程例如以下,首先须要部门经理审批.假设请假天数大于2天,则须要总经理审批,否则HR审批就可以 一:创建maven项目,项目结构例如以下: 增加依赖 pom.xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.17.0</version> </depe

Activiti工作流简单入门 (zhuan)

https://my.oschina.NET/Barudisshu/blog/309721 *********************************************** 摘要: 自jBPM创始人Tom离开之后,jBPM和Activiti就开始大相径庭,jBPM被迫使用新的LGPL协议,而Activiti则使用一种更为宽松的Apache License 2.0协议.不管使用jBPM还是Activiti,两者都遵循BPMN 2.0规范,都可满足项目的一般需求,相比于jBPM,Act

Activiti工作流简单入门

BPMN 2.0 BPMN最初由业务流程倡议组织(BPMI)定案,现在BPMI并入到OMG(Object Management Group)了,则由OMG建立规范和维护. BPMN 2.0正式更名为(Business Process Model And Notation)业务流程符号和模型,也有人继续称呼为业务流程建模标记法(Business Process Modeling Notaion),不过无所谓,不管是jBPM.Activiti还是国人开发的FixFlow,都遵循BPMN规范. Mav

Web Service简单入门例子

我们一般实现Web Service的方法有很多种.其中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决每个问题而提供的在线服务方案,其主要采用了SOAP(Simple Object Access Protocol)协议,数据传输格式使用XML格式来描述,因此也具有跨平台的特性. web广泛用到的技术: TCP/IP:通用网络协议,被各种设备使用 HTML(标准通用标记语言下的一个应用):通用用户界面,可以使用HTML标签显示数据 Java:写一

Spring + Activiti + Drools整合的请假例子

业务规则是这样的(没有实际意义,只是做demo演示) 如果请假总天数大于等于3天,则需要总经理审批,否则不需要总经理审批 如果当次请假小于3天,则请假总天数等于当次请假天数+2 否则,请假总天数等于当次请假次数+5 其中,总的请假次数的计算逻辑交给drools处理 新建maven项目,目录结构如下: 一:加入maven依赖: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncodi

响应式网页设计简单入门(强烈推薦!!!!)

响应式网页设计简单入门 Overview: 构造基本的HTML页面 动态加载样式表 Viewport 字体缩放 侧边栏 导航菜单 图片自适应 其他 总结 说到响应式网页设计(Responsive web design),最近在谷歌加上碰到个奇葩贴子,通过一个原始到无法再简单的网页Motherfucking Website及满屏幕的fuck道出了网页设计的真谛,这孩子不是个激进分子就是个报复社会型的货没错,虽然整篇文章就像是泼妇骂街,但我特么是笑着读完的.. 统计了下全文共用Fuck (包括fuc

正则表达式入门教程&amp;&amp;经典Javascript正则表达式----share

前言 例子: ^[email protected]+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 一个学习正则表达式不错的教程,对正则表达式有兴趣,但不太了解的童鞋可以参考下 以下内容摘自 常用JQuery数字类型验证正则表达式整理  和    经典Javascript正则表达式         [  留个备份 :) ~~  ]     常用JQuery数字类型验证正则

Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API

文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activiti 框架,写写博客的,但是,事情总是纷纷杂杂,一直拖延到现在,这一节原本想要写一下关于 Activiti 的 API ,但是,想着太多这样的博客了,而且显得太生硬,难以理解,所以,这些 API 就在实际的 demo 中来讲解. 一.建立流程图 在开始做工作流之前,我们首先应该把具体的业务在工作流的部署

正则表达式简单入门

 正则表达式简单入门    正则表达式在平常编程中有着大量的应用,对于任何一个想学习编程的人来说,正则表达式是一个必须掌握的知识. 废话不多说,下面先对正则表达式做一个简单的入门介绍,在后续的文章中,将会进行详细的介绍.    一.元字符 元字符一共有12个:$ ( ) [ { ? + * . ^ \ | 元字符有特殊的含义,如果要使用其字面值,则必须对其进行转义. 如: \$  \*  \( 等等 二.控制字符或不可打印字符 \a  警报 \e  退出 \f  换页 \n  换行 \r