Activiti多人会签,1/3的人同意则审批通过的实现

Activiti多人会签,1/3的人同意则审批通过的实现

第一步:配置流程

1. 配置审批通过的条件,如下,

线条上配置审批通过条件:${passCount/totalCount >=1/3}

线条上配置审批退回条件:${passCount/totalCount < 1/3}

 

2. 申请节点添加结束监听器

3. 配置该审批节点结束的条件

Sequential:false,false为并行执行,true为串行执行,此处要设置为并行

Collection: ${partyList},用于执行该会签环节的参与人,此处使用partyList的流程变量

Element variable: party,此处表示的是每一个分支都有一个叫party的流程变量,和上方的assignee结合使用就可以决定该分支应该由谁执行

Completion condition:该节点的结束条件(该条件一定要配置,否则要等所有人都执行完才会结束该节点

4. 为该审批节点添加创建时的监听器

二:代码部分

1. 申请节点结束时,设置下个审批节点的参与人

监听器内容如下,主要用于设置下个审批节点的参与人

package com.ylkj.base.flow.listener;

 

import java.util.ArrayList;

import java.util.List;

 

import org.activiti.engine.delegate.DelegateTask;

import org.activiti.engine.delegate.TaskListener;

 

public class MyCompeteistener implements TaskListener {

@Override

public void notify(DelegateTask arg0) {

      List<String> userList = new ArrayList<String>();

      userList.add("111");

      userList.add("222");

      userList.add("333");

      arg0.setVariable("partyList", userList);

}

}

 

2. 审批节点创建时的监听器,主要用于分配任务执行人

监听器内容如下:

package com.ylkj.base.flow.listener;

 

import org.activiti.engine.delegate.DelegateTask;

import org.activiti.engine.delegate.TaskListener;

/**

 * 节点创建监听器

 * 为节点设置处理人

 */

public class MutiGroupsListener implements TaskListener {

//节点完成的时候调用此监听器

@Override

public void notify(DelegateTask arg0) {

      //将通过人数,未通过人数,总数,重新置为0,退回的时候才能重新计算

      arg0.setVariable("passCount", "0");

      arg0.setVariable("totalCount", "0");

      arg0.setVariable("noPassCount", "0");

      //为每一个任务设置处理人

      String party = (String)arg0.getVariable("party");

     arg0.setAssignee(party);

}

}

3. 审批节点有人执行任务时,需要统计执行情况

/* ( Javadoc)

* <p>Title: completeTask1</p>

* <p>Description: </p>

* @param procInstId 流程实例id

* @param taskId     任务id

* @param variables  流程变量

* @param passflag   审批同意标志(yes/no

* @see com.ylkj.base.activiti.service.ActivitiService#completeTask1(java.lang.String, java.lang.String, java.util.Map, java.lang.String)

*/

     

public void completeTask1(String procInstId,String taskId, Map<String, Object> variables,String passflag) {

      //获取当前节点的task_def_key_,此段代码主要用于区分多个节点时,审批通过记录数与总数

      Task taskQuery = processEngine.getTaskService().createTaskQuery().taskId(taskId).singleResult();

      List<Task> tasks = processEngine.getTaskService().createTaskQuery().taskName(taskQuery.getName()).processInstanceId(procInstId).list();

     

      int passCount = 0;//审批同意人数

      int noPassCount = 0;//

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值