工作流activti使用简单样例

绘制流程图:

为idea下载 bpmn插件:

 

绘制流程图:

 

 

 

 

 

数据库配置:

     1.新建activiti.cfg.xml文件,mysql配置如下:

 

<?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">
  <!--为true时如果表未建会自动建立-->
    <property name="databaseSchemaUpdate" value="false" />
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/actviti_test?createDatabaseIfNotExist=true&useSSL=false" />
    <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
    <property name="jdbcUsername" value="root" />
    <property name="jdbcPassword" value="123" />
  </bean>

</beans>


代码:

 

 

 

 
package test;

import org.activiti.engine.*;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.persistence.entity.GroupEntity;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.activiti.engine.task.Task;

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

/**
 * Created by yan on 17-3-23.
 */
public class ActivtiSmilpeServer {
    public static ProcessEngine processEngine =
            ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
    /**
     * 权限操作service
     */
    public static IdentityService identityService = processEngine.getIdentityService();
    /**
     * 运行service
     */
    private static RuntimeService runtimeService = processEngine.getRuntimeService();
    /**
     * 任务执行service
     */
    private static TaskService taskService = processEngine.getTaskService();

    /**
     * 权限操作
     */
    public void identity() {
        //这里为做测试,设置了一些默认用户,在实际使用时可以根据对接的系统进行初始话的设计,或者不设置直接交给对接的系统处理
        Group group = new GroupEntity();
        group.setId("1");
        group.setName("审核组");
        group.setType("1");
        identityService.saveGroup(group);
        User user1 = new UserEntity();
        user1.setId("1");
        user1.setFirstName("步惊云");
        identityService.saveUser(user1);
        User user2 = new UserEntity();
        user2.setId("2");
        user2.setFirstName("聂风");
        identityService.saveUser(user2);
        //关联用户与组
        identityService.createMembership("1", "1");
        identityService.createMembership("2", "1");
    }

    /**
     * 部署流程,每次部署在ACT_RE_PROCDEF表中会多一条记录,该记录版本为最新
     *
     * @param path bpmn文件地址 如:simple.bpmn
     */
    public void deploy(String path) {
        processEngine.getRepositoryService().createDeployment().addClasspathResource(path).deploy();
    }

    /**
     * 根据id发布流程
     *
     * @param id     表ACT_RE_PROCDEF的id
     * @param userId 用户id
     */
    public void startById(String id, String userId) {
        Map variables = new HashMap();
        //为图中的#{userId},赋值,指定发布新闻的对象
        variables.put("userId", userId);
        processEngine.getRuntimeService().startProcessInstanceById(id, variables);

    }

    /**
     * 根基key发布流程,会发布对应key最新的版本,key值为 bpmn文件的id
     *
     * @param key    表ACT_RE_PROCDEF的key
     * @param userId 用户id
     */
    public void startByKey(String key, String userId) {
        Map variables = new HashMap();
        //为图中的#{userId},赋值,指定发布新闻的对象
        variables.put("userId", userId);
        runtimeService.startProcessInstanceByKey(key, variables);
    }

    /**
     * 用户发布新闻
     *
     * @param userId 用户id
     * @param taskId 任务id
     */
    public void userTask(String userId, String taskId) {
        //得到任务对象
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        if (task.getAssignee().equals(userId)) {//判断是否该任务的执行人
            /**
             * 1.完成任务
             * 2.这时如我在图上的设置会触发listener的notify事件,为下一个流程的候选组赋值
             * 3.除了listener事件,也可以通过startById与startByKey中相同的手段为候选组或者候选人赋值,如果多个可以#{aaa},#{bbb}
             */
            taskService.complete(taskId);
        }

    }

    /**
     * 候选组审核流程
     *
     * @param userId 用户id
     * @param taskId 任务id
     */
    public void groupTask(String userId,String taskId) {
        //候选组的人员认领任务,只有候选组里的人可以认领
        taskService.claim(taskId,userId);
        //设置条件,走符合设置条件的路线,这里的排它网关可以不要,有排它网关的好处是可以在排它网管上设置默认值
        Map variables = new HashMap();
        //为图中的${type==1}的type,赋值
        variables.put("type", 1);
        //完成任务
        taskService.complete(taskId);
    }

}
 variables = new HashMap();
        //为图中的#{userId},赋值,指定发布新闻的对象
        variables.put("userId", userId);
        processEngine.getRuntimeService().startProcessInstanceById(id, variables);

    }

    /**
     * 根基key发布流程,会发布对应key最新的版本,key值为 bpmn文件的id
     *
     * @param key    表ACT_RE_PROCDEF的key
     * @param userId 用户id
     */
    public void startByKey(String key, String userId) {
        Map variables = new HashMap();
        //为图中的#{userId},赋值,指定发布新闻的对象
        variables.put("userId", userId);
        runtimeService.startProcessInstanceByKey(key, variables);
    }

    /**
     * 用户发布新闻
     *
     * @param userId 用户id
     * @param taskId 任务id
     */
    public void userTask(String userId, String taskId) {
        //得到任务对象
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        if (task.getAssignee().equals(userId)) {//判断是否该任务的执行人
            /**
             * 1.完成任务
             * 2.这时如我在图上的设置会触发listener的notify事件,为下一个流程的候选组赋值
             * 3.除了listener事件,也可以通过startById与startByKey中相同的手段为候选组或者候选人赋值,如果多个可以#{aaa},#{bbb}
             */
            taskService.complete(taskId);
        }

    }

    /**
     * 候选组审核流程
     *
     * @param userId 用户id
     * @param taskId 任务id
     */
    public void groupTask(String userId,String taskId) {
        //候选组的人员认领任务,只有候选组里的人可以认领
        taskService.claim(taskId,userId);
        //设置条件,走符合设置条件的路线,这里的排它网关可以不要,有排它网关的好处是可以在排它网管上设置默认值
        Map variables = new HashMap();
        //为图中的${type==1}的type,赋值
        variables.put("type", 1);
        //完成任务
        taskService.complete(taskId);
    }

}

 

 

 

package test;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.identity.Group;


/**
 * Created by yan on 17-3-24.
 */
public class SimpleListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        //设置候选组
        Group group = ActivtiSmilpeServer.identityService.createGroupQuery().groupId("1").singleResult();
        delegateTask.addCandidateGroup(group.getId());
    }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值