工作流activti使用简单样例

绘制流程图:

为idea下载 bpmn插件:

工作流activti使用简单样例_第1张图片


绘制流程图:


工作流activti使用简单样例_第2张图片

工作流activti使用简单样例_第3张图片


工作流activti使用简单样例_第4张图片



工作流activti使用简单样例_第5张图片

数据库配置:

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





  
  
    
    
    
    
    
  


代码:

工作流activti使用简单样例_第6张图片

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);
    }

}

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());
    }
}


你可能感兴趣的:(工作流activti使用简单样例)