Activiti工作流 OA项目流程

准备学习过程

1.什么是工作流?

工作流:工作流程,业务进行的每个步骤

例子请假:申请 ----------经理审批----------------总经理审批------------人事存档

2.实现方式

1)通过程序编码通过状态更改实现(弊端:流程更改后不能使用)

2)通过Activiti

3.Activiti工作原理

1)读取XML文件 将流程存入表中;

2)读取表中数据,一行一行执行

4.IDEA安装bpmn画图插件 actibpm

1)在idea插件网下载,选中setting中的plugins 通过本地安装插件

5.构建测试项目

1)maven 依赖

<?xml version="1.0" encoding="UTF-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>com.workflow.activiti</groupId>
    <artifactId>activiti</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>org.activiti.cloud</groupId>
            <artifactId>activiti-cloud-services-api</artifactId>
            <version>7.0.0.Beta1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.28</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        <!-- log end -->

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <!--文件读写-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>


    <repositories>
        <repository>
            <id>alfresco</id>
            <name>Activiti Releases</name>
            <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
 <!--指定项目编译版本-->
<build>
  <plugins>
        <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

</project>

 

2)log4j.properties

 

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

 

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="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:/ip:3306/activiti?nullCatalogMeansCurrent=true"></property>
        <property name="username" value=""></property>
        <property name="password" value=""></property>
    </bean>
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!--代表数据源       -->
        <property name="dataSource" ref="dataSource"/>
<!--代表是否生成表结构       -->
        <property name="databaseSchemaUpdate" value="true" />
    </bean>
</beans>

如果mysql jar包是6.x版本需要在url后加nullCatalogMeansCurrent=true 如果是5.x版本可以不加;这个配置代表数据库的选择优先级

如果为true则在url中选择;不然遍历数据库

如果出现中文乱码 在url后加characterEncoding=UTF-8

注意:在xml配置文件中配置数据库URL时,要使用&的转义字符也就是&amp;

 

全局流程变量三种设置方式

1.启动流程实例赋予

2.完成Task时设置

3.runtimeService.setVariable(流程实例ID)

4.TaskService.setVariable(任务id)

 

组任务处理

 

一个任务可以有多个候选处理人,处理任务前要拾取任务,如果拾取后不想出处理可以归还任务到组里

组任务测试

@Test
    public void testTeamTask(){

        //1.流程部署
        //2.启动流程实例
        //3.任务处理
        //4.组任务处理
        //4.1查询组任务
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = defaultProcessEngine.getTaskService();
        List<Task> list = taskService.createTaskQuery().processDefinitionKey("my_process1").taskCandidateUser("lisi").list();
        for (Task task:
                list  ) {
            if(task.getAssignee()==null){
                System.out.println("说明当前任务属于组任务");
            }
            //4.2拾取组任务
            taskService.claim(task.getId(),"zhangsan");
            //4.3归还任务(归还前根据处理人名称去查询任务,确定task不为null在归还,也是任务交接)
            taskService.setAssignee(task.getId(),null);
            //5完成任务
            Task task1 = taskService.createTaskQuery().processDefinitionKey("").taskAssignee("").singleResult();
            taskService.complete(task1.getId());
        }
    }

 

posted @ 2020-07-10 16:01  不知无畏  阅读(44)  评论(0)    收藏  举报