最近正在使用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、流程图