maven 实现activity工作流的简单例子(以报销为例 附代码)

摘要:
今天,我看到公司有一个关于活动工作流的项目。记录第一个联系人以便于合并和后续查询。选择绘图插件的解压缩位置,如下图所示:验证安装是否成功。在maven工具中,单击file new other…以搜索activiti。如果出现两个文件activitigram和activitiproject,则安装成功。2.运行测试代码。1.在Maven中创建Maven项目。2.导入pom中需要依赖的jar包。xml配置文件。以MySQL数据库为例4.0.0mavenProactivityWordFlow0.0.1-SNAPSHOTjaractivityWordFlowhttp://maven.apache.orgorg.activitiactiviti引擎6.0.0˂!

今天看到公司有一个项目,是关于activity工作流的,第一次接触,记录一下,方便巩固和之后的查询。

1.配置maven环境

2.运行测试代码

3.代码实现activity工作流

1.配置maven环境

  activity是一个比较简单容易上手的工作流,主要操作分为一下步骤

  • 利用activity插件画出需要的逻辑流程图
  • 部署流程
  • 启动流程
  • 迭代处理流程
  • 流程结束

(1)安装所需的画图插件(有在线安装和离线安装,建议是离线安装)

  离线通过安装包来安装

    下载链接:https://pan.baidu.com/s/1jZgTImyDFsQ62ttt5CyQKg,提取码:abw0

    解压后,将 对应的plugins中j所有ar包(我的解压路径是:D:activityWorkFlowActivitiDesignerplugins)复制到maven工具的安装目录(maven 实现activity工作流的简单例子(以报销为例 附代码)第1张)下,然后删除configuration文件下的org.eclipse.update整个文件(不删掉的话,会报错的)

maven 实现activity工作流的简单例子(以报销为例 附代码)第2张

  然后在 maven工具中选择help - install new software

maven 实现activity工作流的简单例子(以报销为例 附代码)第3张

点击进来后,选择  add - local… 选择画图插件解压后的位置,如下图:

maven 实现activity工作流的简单例子(以报销为例 附代码)第4张

验证是否安装成功,在maven工具中,点击 file - new - other...中 搜索activiti 如果出现  activiti diagram  和activiti project 两个文件 ,说明已经安装成功了。

maven 实现activity工作流的简单例子(以报销为例 附代码)第5张

    

2.运行测试代码

1.在maven工具中,新建一个maven工程

maven 实现activity工作流的简单例子(以报销为例 附代码)第6张

2.在pom.xml配置文件中导入需要依赖的jar包,以mysql数据库为例

maven 实现activity工作流的简单例子(以报销为例 附代码)第7张maven 实现activity工作流的简单例子(以报销为例 附代码)第8张
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>mavenPro</groupId>
  <artifactId>activityWordFlow</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  
  <name>activityWordFlow</name>
  <url>http://maven.apache.org</url>
  <properties>  
    </properties>
  
   <dependencies> 
    <dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-engine</artifactId>
    <version>6.0.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
    <dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring</artifactId>
    <version>6.0.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
    <dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.5.7</version>
    <type>pom</type>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.7.25</version>
    <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.17</version>
    </dependency>
  </dependencies> 
  
</project>
pom.xml

 注意:如果版本不对引起的报错,可以百度“maven中央仓库”,在里面找到对应依赖的jar包,复制粘贴,替换即可。

3.然后新建一个activiti.cfg.xml配置文件,来创建连接对应的数据库。

<?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.StandaloneInMemProcessEngineConfiguration">
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"/>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="qwer1234" />
    </bean>
</beans>

 4.新建一个java类,用来在msql数据库中创建表

package activityWordFlow;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;

public class CreateTable {
    public static void main(String[] args) {             
        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();     
        System.out.println("processEngine="+processEngine);
         
    }
}

其中:是根据第3步的配置文件名称(activiti.cfg.xml),运行后,查看数据库,就会出现28张表,如下图:

maven 实现activity工作流的简单例子(以报销为例 附代码)第9张

 5. 先把properties界面展示出来,方便之后使用。

maven 实现activity工作流的简单例子(以报销为例 附代码)第10张maven 实现activity工作流的简单例子(以报销为例 附代码)第11张

6.以简单报销流程为例,在maven工具中,利用画图插件新建一个baoxiao.bpmn,如图:

maven 实现activity工作流的简单例子(以报销为例 附代码)第12张maven 实现activity工作流的简单例子(以报销为例 附代码)第13张maven 实现activity工作流的简单例子(以报销为例 附代码)第14张

7.在界面上palette(画板)中,把StartEvent节点拖出来即可,然后选择 new user task,新增一个用户,依次添加报销人、经理审批、财务审批和结束节点(EndEvent),添加完成后,如下图:

maven 实现activity工作流的简单例子(以报销为例 附代码)第15张

在该流程中的各个环节 ,配置属性   报销人---employee、经理审批---manager、财务审批 --- account,保存一下该流程

maven 实现activity工作流的简单例子(以报销为例 附代码)第16张maven 实现activity工作流的简单例子(以报销为例 附代码)第17张maven 实现activity工作流的简单例子(以报销为例 附代码)第18张

注:如果保存成功了,会有同名的.png图片生成,本例子中是baoxiao.png,如图:

maven 实现activity工作流的简单例子(以报销为例 附代码)第19张

如果没有生成的话,请在Window - preferences - save action 中,勾选 create process ...这一选项。

maven 实现activity工作流的简单例子(以报销为例 附代码)第20张

到第七步完成后,一个简单报销的activity工作流已经建好了,接下来就是要通过代码来实现该工作流。

3.代码实现activity工作流

package activityWordFlow;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;



public class run {
        /**
         * 部署流程
         * 执行完,就会像act_re_procdef、act_re_deployment和act_ge_bytearray三张表中,插入数据
         */
        private static ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
         
            public void delployFlow(){
                         Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的service
                        .createDeployment()//创建一个部署对象
                        .name("报销流程")    //添加部署对象名称
                        .addClasspathResource("baoxiao.bpmn")//从classpath的资源加载,一次只能加载一个文件
                        .addClasspathResource("baoxiao.png")//从classpath的资源加载,一次只能加载一个文件
                        .deploy();//完成部署
                
                // 存在在数据库 act_re_procdef的DEPLOYMENT_ID_
                //act_re_procdef(流程定义数据表)  act_re_deployment  (部署信息表)   act_ge_bytearray(资源文件表)
                System.out.println(deployment.getId());
                System.out.println(deployment.getName());
           }
            /**
             * 启动流程  runtimeService对象
             * 执行完,就会在 act.ru.task表中,插入数据(每次插入一条数据)
             */
            public void flowStart() {
                RuntimeService runtimeService = processEngine.getRuntimeService();// 获取runtimeService对象
                ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("员工报销单据");//act_re_procdef(流程定义数据表)中的key_字段
            }
            /**
             * 查找代办任务信息
             */
            public void findEmployeeTask(){
                //数据库关系》》》》ID【act_re_deployment】 == ID【act_ru_execution】  == ID【act_ru_task】 ==》【ASSIGNEE_(cwh)】
                String assignee = "employee";  //节点的assignee_   
                List<Task> taskList= processEngine.getTaskService()//获取任务启动流程的service
                        .createTaskQuery()//创建查询对象
                        .taskAssignee(assignee)//指定查询人
                        .list();
                
                if(taskList.size()>0){
                    for (Task task : taskList){
                        System.out.println("代办任务ID:"+task.getId());
                        System.out.println("代办任务name:"+task.getName());
                        System.out.println("代办任务创建时间:"+task.getCreateTime());
                        System.out.println("代办任务办理人:"+task.getAssignee());
                        System.out.println("流程实例ID:"+task.getProcessInstanceId());
                        System.out.println("执行对象ID:"+task.getExecutionId());
                    }
                }
            }

            /**
             * 处理流程
             * 
             * 根据act_ru_task 任务表的id,获取流程的service对象,调用complete方法来处理流程。
             * 
             * @Description:
             */
            public void completeTask(){
                // ID【act_ru_task】
                String taskId = "2505";        
                processEngine.getTaskService().complete(taskId);//完成任务     
                System.out.println("完成任务,任务ID:"+taskId);
         
          }

            public static void main(String[] args) {
                run r = new run();
                //r.delployFlow();
                //r.flowStart();
                r.findEmployeeTask();
                //r.completeTask();
            }

}

如上图,注释上都写的很清楚了,一次执行以上方法,对应数据库中的表,就能查看到,工作流的数据流向。

免责声明:文章转载自《maven 实现activity工作流的简单例子(以报销为例 附代码)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 开机震动、动画、铃声添加方案window.atob()与window.btoa()方法实现编码与解码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于工作流的模式

昨天发了几篇文章,被一些朋友说写的不认真,今天又写了几篇,请各位指点另承上,今晚随手写一篇[关于工作流的模式]的文章,没有什么技术性,无法归到技术栏里,就当随笔发吧-------------------------关于工作流的模式流模式(Sequential)1.适合一个比效机械化的流程2.在这种流程中,参与者处于一种被动的局面,他必须沿设定的路线一步一步...

Activity的生命周期

今天对于Activity的生命周期又有了一点深入的理解。做个总结吧。 一、正常情况下的生命周期 什么叫正常情况下的生命周期呢?也就是我们经常了解的一个活动的正常的生命流程。不用过度解释, 总结如下: (1)onCreate()方法 活动第一次创建时被调用。 (2)onStart() 活动由不可见变为可见的时候调用 (3)onResume() 当活动准备开始...

工作流引擎

    工作流引擎是 BOS 系统的一个重要组件。 它可以根据客户具体的业务逻辑,来定义工作流模型。 整个应用程序就根据所定义的流程来运行。 它把应用系统模块和工作流程分开。 当流程发生变化,只需修改流程模型, 具体的应用程序无需修改。    参考wfmc 标准,我们把工作流分成几个模块。    · 流程定义模型  · 用户端  · 工作流引擎  · 建模...

实现、设置Android TabWidgetby小雨

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!      首先先看一个小例子,接着讲授理原             TabTest.java       view plaincopy to clipboardprint?    package org.hualang.tab;      i...

获取apk的Activity和Package

2.查看包名和activity adb logcat|grep -i activitymanager 获取当前界面的activity 1.adb shell dumpsys window windows 2.adb shell dumpsys window windows| grep mCurrentFocus 3.获取Package aapt d...

android的activity被杀死后如何重启

最近公司的大屏展示机器人上的程序运行时间长了,比如五天,十天会出现偶尔的崩溃,查日志可能是内存溢出或者是ndk层的错误,这种错误一时也不太好查找,但是产品那边有个要求就是程序退出了一定要能重启,能抓日志最好抓日志,然而ndk层的崩溃是无法重启的。但是我们去查看日志的时候发现了一个规律。 虽然应用程序所在的程序被kill process了,但是不到两秒的时间...