activiti会签-投票统计

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

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

  <sequenceFlow id="flow1" name="flow1" sourceRef="startevent1" targetRef="voteUserTask">
      <extensionElements>
        <activiti:executionListener event="take" expression="${execution.setVariable("voteUserTask_Countor_",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下载积分的同学可以私聊我获取;

你可能感兴趣的:(#,工作流,activiti,会签,投票)