在Activiti-5.4中实现会签



 

 最近正在使用Activiti5.4实现系统中的流程,在发文流程中有会签,研究了两天终于搞定了,现分享出来,以免其他兄弟们走弯路了,其中有不对的欢迎拍砖。

 

1、会签节点策略配置

 

2、流程定义文件中会签节点的配置

<userTask id="usertask2" name="会签" activiti:assignee="${hqr}">
      <extensionElements>
        	<activiti:taskListener event="create" delegateExpression="${counterSignTaskListener}"></activiti:taskListener>
	<activiti:taskListener event="complete" delegateExpression="${counterSignTaskListener}"></activiti:taskListener>
      </extensionElements>
      <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="assigneeList" activiti:elementVariable="hqr">
	<completionCondition>${signVoteResult != 2 }</completionCondition>
      </multiInstanceLoopCharacteristics>
</userTask>

 

 3、counterSignTaskListener代码

package com.flowcenter.listener.task;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

import com.flowcenter.common.service.ISignTaskRuleService;

/**
 * 会签人工任务TaskListener
 * @author ShiHukui
 *
 */
public class CounterSignTaskListener implements TaskListener {
	
	/**
	 * 注入会签规则业务层
	 */
	private ISignTaskRuleService signTaskRuleService;
	public void setSignTaskRuleService(ISignTaskRuleService signTaskRuleService) {
		this.signTaskRuleService = signTaskRuleService;
	}


	public void notify(DelegateTask delegateTask) {
		
		// 事件名称
		String eventName = delegateTask.getEventName();
		
		// 任务相关信息
		String taskId = delegateTask.getId();
		String taskKey = delegateTask.getTaskDefinitionKey();
		String procDefId = delegateTask.getProcessDefinitionId();
		String procInstId = delegateTask.getProcessInstanceId();
		
		// 获取当前UUID
		String signTaskUUID = (String)delegateTask.getVariable("signTaskUUID");
		
		// create 事件
		if("create".equals(eventName)) {
			
			// 获取审核人列表
			String assigneeList = delegateTask.getVariable("assigneeList").toString();
			
			System.out.println("会签人为:"+assigneeList);
			
			// 保存会签人员信息
			signTaskRuleService.saveSignTaskAssignees(taskId , 
													  taskKey , 
													  delegateTask.getName() ,
													  procInstId ,
													  procDefId, 
													  delegateTask.getAssignee(), 
													  signTaskUUID , 
													  assigneeList);
		}
		// complete 事件
		else if("complete".equals(eventName)) {
			
			// 获取投票结果和意见
			String voteResult = (String) delegateTask.getVariable("voteResult");
			String voteOpinion = (String) delegateTask.getVariable("voteOpinion");
			
			// 填充审核人投票信息
			int result = signTaskRuleService.saveSignTaskAssigneeVote(taskId, taskKey, procDefId, procInstId, voteResult, voteOpinion , signTaskUUID);
			
			System.out.println("会签结果为(0:打回,1:通过,2:会签进行中):"+result);
			delegateTask.setVariable("signVoteResult", result);
		}
	}
	
}

 

 

 4、流程图

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值