第三章:activiti流程工具使用和学生请假流程实例

第三章:activiti流程工具使用和学生请假流程实例第三章:activiti流程工具使用和学生请假流程实例

大家好,又见面了,我是你们的朋友全栈君。

接着上篇博文,我们画一个流程图:

在resources下建一个文件夹,在文件夹中建bpmn绘图文件:

第三章:activiti流程工具使用和学生请假流程实例

第三章:activiti流程工具使用和学生请假流程实例

画图区域介绍:

第三章:activiti流程工具使用和学生请假流程实例

下面我们写一个学生请假流程实例:

建一个bpmn文件,如下:

第三章:activiti流程工具使用和学生请假流程实例

如下图,一个完整的流程要有开始和结束,所以先制作开始和结束节点,选择startEvent,然后再画图区域画开始圆圈,结束同理:

第三章:activiti流程工具使用和学生请假流程实例

接着我们建三个任务节点,选工具区的userTask,画三个任务节点:

第三章:activiti流程工具使用和学生请假流程实例

修改任务名称,如下:

第三章:activiti流程工具使用和学生请假流程实例

再把各个人物连在一起,最后结果如下:

第三章:activiti流程工具使用和学生请假流程实例

然后给每个任务分配决策人,什么意思呢,就是每个任务节点都要有对应的执行人。我们想一下学生请假的流程是什么,首先某个学生想请假,于是就提示申请,(这里对于我们上图的学生请假申请任务节点),现实中我们会写张申请单,上面有请假理由,然后把这个单子给班长看看,(对于上图的班长审批)。然后班长把这个单子再给班长任决定批不批准改学生请假(对应上图的班主任审批任务节点)。可以看出每个任务的执行人或说是决策人都不一样,所以这里需要我们去分配。如下:

第三章:activiti流程工具使用和学生请假流程实例

第三章:activiti流程工具使用和学生请假流程实例

第三章:activiti流程工具使用和学生请假流程实例

,对了,还有我们要最好保存流程图片,需要设置一下windows–>preferences–>activiti–>save actions–>打钩:

第三章:activiti流程工具使用和学生请假流程实例

设置好后,我们再保存流程的时候就会自动生成png结尾的图片了:

第三章:activiti流程工具使用和学生请假流程实例

打开图片是和我们画的图一样的。

最后我们还要修改一下流程id,点击流程图空白处,修改如下:

第三章:activiti流程工具使用和学生请假流程实例

下面写流程代码,建个流程包和流程类

package com.xiaoyexinxixn.ActivityLesson.flow;

import static org.junit.Assert.*;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;

public class StudentLeaveProcess {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/StudentLeave.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/StudentLeave.png")
		//流程名称
		.name("学生请假流程")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}

}

成功运行代码后会影响数据库的表有:

流程部署表:act_re_deployment

流程定义表:act_re_procdef

资源文件表:act_ge_bytearray

资源配置表:act_ge_property

出现相应数据。

第三章:activiti流程工具使用和学生请假流程实例

每运行一次上图代码就会生成一次请假流程实例。

下面写启动流程实例代码:

	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的service
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("studentLeaveProcess");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}

启动流程影响到的表有:

执行对象表:act_ru_execution  是正在执行的节点,比如请假流程到班长申批,那么此时的执行对象就是班长

身份联系表:act_ru_identitylink

用户任务表:act_ru_task

活动任务节点历史表:act_hi_actinat

身份联系历史表:ac_hi_identitylink

流程实例表历史:ac_hi_procinst

历史人物表:act_hi_taskinst

这里我遇到点麻烦,汉字在navicat乱码,一时无法解决,所以就把所有的汉字改成了英文和数字:

有两处:

第三章:activiti流程工具使用和学生请假流程实例

还有一处分配者

第三章:activiti流程工具使用和学生请假流程实例

然后重新启动流程,

看流程的当前执行者 :

第三章:activiti流程工具使用和学生请假流程实例

ac_hi_actinst表

第三章:activiti流程工具使用和学生请假流程实例

这里end_time字段没有值,说明此任务节点还没有结束,同理看上面的开始任务节点已经结束了

下面我们查看任务执行的情况,下面查询的结果数据来自act_ru_task

/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List<Task> taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
				.taskAssignee("xiaoliu001")
				.list();
		for(Task task:taskList){
			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());
		}
	}

结果:

任务ID:2504
任务名称:leave001
任务创建时间:Thu Apr 19 17:51:01 CST 2018
任务委派人:xiaoliu001
任务流程实例Id2501
/**
	 * 完成任务
	 */
	@Test
	public void completeTask(){
		processEngine.getTaskService().complete("2504");
	}

执行上面代码,完成leave001任务节点,2504是任务id,对于上面查询的任务ID

执行完成后,任务的委派人变成了xiaoliu002。

这样任务就到了leave002任务节点。

身份联系历史表也多了一个人

第三章:activiti流程工具使用和学生请假流程实例

这里再执行xiaoliu001的查看任务方法,会没有输出,因为人物已经给xiaoliu002.

那我们再查询下xiaoliu002的结果如下:

任务ID:5002
任务名称:leave002
任务创建时间:Thu Apr 19 18:44:00 CST 2018
任务委派人:xiaoliu002
任务流程实例Id:2501

接着我们再执行完成任务方法,注意修改任务id为上面查询到的:

	/**
	 * 完成任务
	 */
	@Test
	public void completeTask(){
		processEngine.getTaskService().complete("5002");
	}

看数据库的任务表act_ru_task:

第三章:activiti流程工具使用和学生请假流程实例

任务走到了leave003节点,任务委派人也变成了xiaoliu003.

这里说一下上图的usertask3对于的就是流程图的id,如下:

第三章:activiti流程工具使用和学生请假流程实例

我们再执行下查看任务方法的结果是:

任务ID:7502
任务名称:leave003
任务创建时间:Thu Apr 19 18:56:33 CST 2018
任务委派人:xiaoliu003
任务流程实例Id:2501

最后我们再执行下完成任务方法:

	/**
	 * 完成任务
	 */
	@Test
	public void completeTask(){
		processEngine.getTaskService().complete("7502");
	}

完了,这样流程就跑完了。我们再看任务表:

第三章:activiti流程工具使用和学生请假流程实例

都变成空的了

执行完了,后表数据都清空,历史表还是有的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106153.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 洛谷P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

    洛谷P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

    2021年9月17日
    50
  • 什么样的水平才算是java高级工程师?

    什么样的水平才算是java高级工程师?「高级工程师」这个词听起来就好像是逼格高的意思,事实上,这是个模糊概念,高不高级没有个标准。做高级的工作才算是高级、还是说职称上带有「高级」字样。我所见过的一些所谓高级的职位或是头上写着高级的人,明明是对这个词的蔑视。每个人对高级的理解都是不一样的,下面就以我理解的高级工程师进行回答,不一定只适合“Java”方面的,如果一个工程师只是局限在一种语言内的“高级”实际上并不会太高级。Java,这个…

    2022年7月7日
    20
  • 什么是Java分布式?

    什么是Java分布式?对于初学者来说,学习Java的根本动力就是分布式开发,特别是apache下面的hadoop、hdfs、hbase,这些基本是分布式开发的标配。那么这篇文章就来和大家一起聊聊分布式吧!一、什么是分布式系统?要理解分布式系统,主要需要明白一下2个方面:1、分布式系统一定是由多个节点组成的系统。其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。2、这些连通的节点上部署了我们的节点,并且相互的操作会有协同。分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服

    2022年6月7日
    34
  • Java Calendar 类的时间操作+获取昨天日期

    Java Calendar 类的时间操作+获取昨天日期JavaCalendar类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单。演示了获取时间,日期时间的累加和累减,以及比较。原文地址:blog.csdn.net/joyous/article/details/9630893注意事项:Calendar的month从0开始,也就是全年12个月由0~11进行表示。而Calen

    2022年5月31日
    51
  • Windows 10版本business_editions和consumer_editions的区别?「建议收藏」

    Windows 10版本business_editions和consumer_editions的区别?「建议收藏」Windows10版本business_editions和consumer_editions的区别?【答1】二者都内置专业版,不同之处在于:consumer_editions版本包含:Home(家庭版);Education(教育版);Professional(专业版);business_editions版本包含:Education(教育版);Enterprise(企业版);Pro…

    2025年7月9日
    4
  • 诺基亚面向开发商推出下一代手机游戏平台

    诺基亚面向开发商推出下一代手机游戏平台转自:新浪游戏http://tech.sina.com.cn/t/2005-12-21/1748799015.shtml 北京时间12月21日消息,在下一代手机游戏研讨会上,芬兰移动通信巨头诺基亚公司首次向16家诺基亚第一批游戏开发商展示了其下一代手机游戏开发平台。下一代手机游戏研讨会于2005年12月1日到2日在赫尔辛基举行,于12月7日到8日在温哥华举行。 通过下一代手机游

    2022年5月18日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号