activiti会签-投票统计

activiti以及会签的相关知识不在这里详细介绍了,推荐一本书《Activiti实战》,
本文主要介绍activiti的会签过程中”选票”的统计;话不多说,直接上代码:
首先流程图如下:
这里写图片描述

1.给flow1绑定take事件,每当会签任务开始时,设置一个流程变量voteUserTask_Countor=0,该变量用于统计投“赞成”票的人数,流程xml代码如下:

  <sequenceFlow id="flow1" name="flow1" sourceRef="startevent1" targetRef="voteUserTask">
      <extensionElements>
        <activiti:executionListener event="take" expression="${execution.setVariable(&quot;voteUserTask_Countor_&quot;,0)}"></activiti:executionListener>
      </extensionElements>
    </sequenceFlow>

2. 给投票任务voteUserTask绑定completionCondition,用来指定完成会签动作的条件,以及绑定complete-tasklistener用来保存投票结果:每当投赞成票时,就将voteUserTask_Countor++,流程xml代码如下:

    <userTask id="voteUserTask" name="投票" activiti:assignee="${voter}">
      <extensionElements>
        <activiti:taskListener event="complete" delegateExpression="${voteTaskCompleteListener}"></activiti:taskListener>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="voterList" activiti:elementVariable="voter">
        <completionCondition>${multiInstance.completeTask(execution)}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>

completionCondition绑定的java代码如下:

@Service(value="multiInstance")
public class MultiInstanceCompleteTask implements Serializable {

    private static final long serialVersionUID = 5754522101489239675L;  


    public boolean completeTask(DelegateExecution execution) {
        int nrOfInstances = (Integer) execution.getVariable("nrOfInstances"); //总的会签任务数量
        int nrOfActiveInstances = (Integer) execution.getVariable("nrOfActiveInstances"); //当前获取的会签任务数量 ---未执行的
        int nrOfCompletedInstances = (Integer) execution.getVariable("nrOfCompletedInstances"); //总的会签任务数量---已执行的


        System.out.println(execution.getVariables());
        if(nrOfActiveInstances > 0) {
            return false;
        }

        //TODO -- 统计票数
        String nodeId = execution.getCurrentActivityId();
        String actInstId = execution.getProcessInstanceId();


        return true;
    }  

}

单个task-completelistener java代码如下:

@Service("voteTaskCompleteListener")
public class VoteTaskCompleteListener implements TaskListener {

    @Override
    public void notify(DelegateTask delegateTask) {
        long counter = (long) delegateTask.getExecution().getVariable("voteUserTask_Countor_");
        String pass = (String) delegateTask.getVariable("pass");
        if("10".equals(pass)){
            //同意
            counter++;
            delegateTask.getExecution().setVariable("voteUserTask_Countor_", counter);
        }
    }
}

3. 计算投票结果ServiceTask
流程xml代码:

<serviceTask id="calculateTicketServiceTask" name="计算投票" activiti:delegateExpression="${calculateTicketDelegate}"></serviceTask>

java实现代码如下:

@Service("calculateTicketDelegate")
public class CalculateTicketDelegate implements JavaDelegate {

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        System.out.println("总投票人数:"+execution.getVariable("voterList"));
        System.out.println("投票结果是:"+execution.getVariable("voteUserTask_Countor_"));
    }
}

以上就可以实现一个会签,统计投票的过程啦。

上述的资源已经上传至:资源下载-csdn,
如果没有csdn下载积分的同学可以私聊我获取;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值