activiti工作流会签功能的实现

activiti工作流会签功能的实现_第1张图片

需求:统计会签部门的审核情况然后决定下一步流程的走向;

activiti工作流会签功能的实现_第2张图片

逻辑实现:
1、设置一个变量signCount 如果同意,signCount+1

        // 如果是会签流程
        List< Task > tasks = taskService.createTaskQuery().taskName( "会签部门" )
                .processInstanceId( processInstanceId ).list();
        // 如果是会签流程
        if ( tasks != null && tasks.size() > 0 )
        {
            List< Task > taskResultList = taskService.createTaskQuery().taskId( taskId )
                    .list();
            // 当前executionId
            String currentExecutionId = taskResultList.get( 0 ).getExecutionId();
            // 当前签署总数
            String currentSignCount = StringUtils.defaultString( runtimeService
                    .getVariable( currentExecutionId , "signCount" ).toString() , "0" );
            if ( outcome.equals( "同意" ) )
            {
                // 签署数+1
                runtimeService.setVariable( currentExecutionId , "signCount" ,
                        Integer.parseInt( currentSignCount ) + 1 );

            }

        }

当所有部门会签完成后,在排它网关上设置一个监听器来判断流程走向

代码实现`public class CurrentFlowIsEnd implements ExecutionListener
{

/** 
 * @Description:验证是否走下一个流程 
 * @param execution
 * @throws Exception 
 * @author liuwu
 * @create_date 2015年10月26日 下午5:47:39
 */
public void notify( DelegateExecution execution ) throws Exception
{
    System.out.println( "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" );
    String executionId = execution.getId();
    // 总共同意的人
    int signCount = Integer.parseInt( execution.getEngineServices()
            .getRuntimeService().getVariable( executionId , "signCount" ).toString() );

    // 总共会签的人数
    List list = ( List ) execution.getEngineServices().getRuntimeService()
            .getVariable( executionId , "assigneeList" );
    int signSize = list.size();
    if(signCount == signSize){
        execution.setVariable( "outcome" , "全部同意" );
    }else {
        execution.setVariable( "outcome" , "有人不同意" );
        execution.setVariable( "signCount" , 0 );
    }

}

}
`

这是我个人的想法实现,如果朋友们有更好的实现方法欢迎指出

你可能感兴趣的:(java)