|
@@ -1,11 +1,19 @@
|
|
|
package org.hswebframework.web.workflow.service.imp;
|
|
|
|
|
|
+import org.activiti.engine.ProcessEngine;
|
|
|
import org.activiti.engine.delegate.DelegateExecution;
|
|
|
import org.activiti.engine.delegate.Expression;
|
|
|
+import org.activiti.engine.delegate.VariableScope;
|
|
|
import org.activiti.engine.impl.Condition;
|
|
|
import org.activiti.engine.impl.RepositoryServiceImpl;
|
|
|
import org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior;
|
|
|
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
|
|
|
+import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
|
|
|
+import org.activiti.engine.impl.context.Context;
|
|
|
+import org.activiti.engine.impl.delegate.ExpressionGetInvocation;
|
|
|
+import org.activiti.engine.impl.el.ExpressionManager;
|
|
|
+import org.activiti.engine.impl.javax.el.ELContext;
|
|
|
+import org.activiti.engine.impl.juel.ExpressionFactoryImpl;
|
|
|
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
|
|
|
import org.activiti.engine.impl.pvm.PvmActivity;
|
|
|
import org.activiti.engine.impl.pvm.PvmTransition;
|
|
@@ -13,9 +21,13 @@ import org.activiti.engine.impl.pvm.process.ActivityImpl;
|
|
|
import org.activiti.engine.impl.pvm.process.ProcessElementImpl;
|
|
|
import org.activiti.engine.impl.task.TaskDefinition;
|
|
|
import org.activiti.engine.repository.ProcessDefinition;
|
|
|
+import org.activiti.engine.runtime.Execution;
|
|
|
import org.activiti.engine.runtime.ProcessInstance;
|
|
|
import org.hswebframework.web.workflow.service.BpmActivityService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.util.*;
|
|
|
import java.util.function.Predicate;
|
|
@@ -28,6 +40,9 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class BpmActivityServiceImpl extends AbstractFlowableService implements BpmActivityService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ProcessEngine processEngine;
|
|
|
+
|
|
|
/**
|
|
|
* 获取指定节点
|
|
|
*
|
|
@@ -90,7 +105,7 @@ public class BpmActivityServiceImpl extends AbstractFlowableService implements B
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<TaskDefinition> getNextActivities(String procDefId, String activityId,DelegateExecution execution) {
|
|
|
+ public List<TaskDefinition> getNextActivities(String procDefId, String activityId, DelegateExecution execution) {
|
|
|
ActivityImpl activity;
|
|
|
if (activityId != null) {
|
|
|
activity = getActivityById(procDefId, activityId);
|
|
@@ -112,7 +127,7 @@ public class BpmActivityServiceImpl extends AbstractFlowableService implements B
|
|
|
|
|
|
@Override
|
|
|
public List<TaskDefinition> getTaskDefinition(ActivityImpl activityImpl, DelegateExecution execution) {
|
|
|
- List<TaskDefinition> taskDefinitionList = new ArrayList<>();
|
|
|
+ Set<TaskDefinition> taskDefinitionList = new HashSet<>();
|
|
|
List<TaskDefinition> nextTaskDefinition;
|
|
|
if ("userTask".equals(activityImpl.getProperty("type"))) {
|
|
|
TaskDefinition taskDefinition = ((UserTaskActivityBehavior) activityImpl.getActivityBehavior()).getTaskDefinition();
|
|
@@ -121,16 +136,39 @@ public class BpmActivityServiceImpl extends AbstractFlowableService implements B
|
|
|
List<PvmTransition> pvmTransitions = activityImpl.getOutgoingTransitions();
|
|
|
List<PvmTransition> outTransitionsTemp;
|
|
|
for (PvmTransition tr : pvmTransitions) {
|
|
|
- PvmActivity pvmActivity = tr.getDestination(); //获取线路的终点节点
|
|
|
- if ("exclusiveGateway".equals(pvmActivity.getProperty("type")) || "parallelGateway".equals(pvmActivity.getProperty("type"))) {
|
|
|
+ PvmActivity pvmActivity = tr.getSource(); //获取线路的终点节点
|
|
|
+
|
|
|
+ boolean exclusiveGateway = "exclusiveGateway".equals(pvmActivity.getProperty("type"));
|
|
|
+ boolean parallelGateway = "parallelGateway".equals(pvmActivity.getProperty("type"));
|
|
|
+
|
|
|
+ if (exclusiveGateway || parallelGateway) {
|
|
|
outTransitionsTemp = pvmActivity.getOutgoingTransitions();
|
|
|
if (outTransitionsTemp.size() == 1) {
|
|
|
nextTaskDefinition = getTaskDefinition((ActivityImpl) outTransitionsTemp.get(0).getDestination(), execution);
|
|
|
taskDefinitionList.addAll(nextTaskDefinition);
|
|
|
} else if (outTransitionsTemp.size() > 1) {
|
|
|
for (PvmTransition transition : outTransitionsTemp) {
|
|
|
- Condition condition = (Condition) transition.getProperty(BpmnParse.PROPERTYNAME_CONDITION);
|
|
|
- if (condition.evaluate(transition.getId(), execution)) {
|
|
|
+ String condition = (String) transition.getProperty(BpmnParse.PROPERTYNAME_CONDITION_TEXT);
|
|
|
+ if (StringUtils.isEmpty(condition)) {
|
|
|
+ nextTaskDefinition = getTaskDefinition((ActivityImpl) transition.getDestination(), execution);
|
|
|
+ if (exclusiveGateway) {
|
|
|
+ if (!CollectionUtils.isEmpty(nextTaskDefinition)) {
|
|
|
+ taskDefinitionList.add(nextTaskDefinition.get(0));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ taskDefinitionList.addAll(nextTaskDefinition);
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ ExpressionManager expressionManager = ((ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration()).getExpressionManager();
|
|
|
+
|
|
|
+ ELContext elContext = expressionManager.getElContext(execution);
|
|
|
+
|
|
|
+ ExpressionFactoryImpl factory = new ExpressionFactoryImpl();
|
|
|
+
|
|
|
+ Object e = factory.createValueExpression(elContext, condition, Object.class).getValue(elContext);
|
|
|
+
|
|
|
+ if (Boolean.TRUE.equals(e)) {
|
|
|
nextTaskDefinition = getTaskDefinition((ActivityImpl) transition.getDestination(), execution);
|
|
|
taskDefinitionList.addAll(nextTaskDefinition);
|
|
|
}
|
|
@@ -141,7 +179,7 @@ public class BpmActivityServiceImpl extends AbstractFlowableService implements B
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return taskDefinitionList;
|
|
|
+ return new ArrayList<>(taskDefinitionList);
|
|
|
}
|
|
|
|
|
|
@Override
|