activiti实现投票机制(2)_徐川江的博客_新浪博客

上一篇activiti实现投票机制(1)已经讲解了流程图投票节点的配置信息,下面就来进行代码实现。
     1.在副组长审批这一环节设置组长审批的处理人数
List idList = new ArrayList();
idList.add("张三");
idList.add("李四");
         idList.add("王五");
        variables.put(“task_assignee_list”, idList);
taskService.complete(taskId, variables);
    2.这里配置了三个人处理,在 activiti实现投票机制(1)中组长审批环节配置为${nrOfCompletedInstances/nrOfInstances == 1},根据这个配置条件得出,这里需要这三个人都出完后流程才继续向下。
   3.当着三人各自点击完成时调用此方法
activiti实现投票机制(2)
    4.自定义ProcessConstants
      activiti实现投票机制(2)
     5.会签joinSignService中的 .joinSignJudgeForRate方法实现
     
public boolean joinSignJudgeForRate(String linkId, Execution execution, float rate) {
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(execution.getProcessInstanceId()).singleResult();
ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService)
.getDeployedProcessDefinition(pi.getProcessDefinitionId());
List activitiList = def.getActivities(); // rs是指RepositoryService的实例
String taskId = null;
a: for (ActivityImpl activityImpl : activitiList) {
List ptList = activityImpl.getOutgoingTransitions();
for (PvmTransition pt : ptList) {
if (linkId.equals(pt.getId())) {
List inPtList = activityImpl.getIncomingTransitions();
PvmActivity pa = inPtList.get(0).getSource();
taskId = pa.getId();
break a;
}
}
}
Map> map = (Map>) runtimeService.getVariable(execution.getId(),
ProcessConstants.KEY_JOIN_SIGN_CONDITION_LIST + "_" + taskId);
List list = map.get(taskId);
int totalCount = list.size();
int isSameCount = 0;
for (String value : list) {
if (value.equals(linkId)) {
isSameCount++;
}
}
//此处判断比率根据传入的rate
if ((float) ((float) isSameCount / (float) totalCount) >= rate) {
return true;
}
return false;
}
     6.在activiti.conf.xml中配置 会签 joinSignService
     7.三个人完成时分别调用完成会签方法(第三部中的方法)可以参考http://blog.sina.com.cn/s/blog_12e5bc2590102x8l2.html配置用户节点创建前和完成后的监听处理器,将完成方法配置在完成后的监听处理器中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值