Commit d237b17280c43b67eb14e63821fc6e22475e6139
1 parent
de9dc245
【缺陷修复】 流程预测时,不能计算流程表达式时,返回空列表,避免流程无法进行下去
Showing
1 changed file
with
15 additions
and
2 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/other/BpmTaskCandidateExpressionStrategy.java
| @@ -4,10 +4,14 @@ import cn.hutool.core.convert.Convert; | @@ -4,10 +4,14 @@ import cn.hutool.core.convert.Convert; | ||
| 4 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; | 4 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateStrategy; |
| 5 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; | 5 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum; |
| 6 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; | 6 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; |
| 7 | +import com.google.common.collect.Sets; | ||
| 8 | +import lombok.extern.slf4j.Slf4j; | ||
| 7 | import org.flowable.bpmn.model.BpmnModel; | 9 | import org.flowable.bpmn.model.BpmnModel; |
| 10 | +import org.flowable.common.engine.api.FlowableException; | ||
| 8 | import org.flowable.engine.delegate.DelegateExecution; | 11 | import org.flowable.engine.delegate.DelegateExecution; |
| 9 | import org.springframework.stereotype.Component; | 12 | import org.springframework.stereotype.Component; |
| 10 | 13 | ||
| 14 | +import java.util.HashMap; | ||
| 11 | import java.util.Map; | 15 | import java.util.Map; |
| 12 | import java.util.Set; | 16 | import java.util.Set; |
| 13 | 17 | ||
| @@ -17,6 +21,7 @@ import java.util.Set; | @@ -17,6 +21,7 @@ import java.util.Set; | ||
| 17 | * @author 芋道源码 | 21 | * @author 芋道源码 |
| 18 | */ | 22 | */ |
| 19 | @Component | 23 | @Component |
| 24 | +@Slf4j | ||
| 20 | public class BpmTaskCandidateExpressionStrategy implements BpmTaskCandidateStrategy { | 25 | public class BpmTaskCandidateExpressionStrategy implements BpmTaskCandidateStrategy { |
| 21 | 26 | ||
| 22 | @Override | 27 | @Override |
| @@ -38,8 +43,16 @@ public class BpmTaskCandidateExpressionStrategy implements BpmTaskCandidateStrat | @@ -38,8 +43,16 @@ public class BpmTaskCandidateExpressionStrategy implements BpmTaskCandidateStrat | ||
| 38 | @Override | 43 | @Override |
| 39 | public Set<Long> calculateUsersByActivity(BpmnModel bpmnModel, String activityId, String param, | 44 | public Set<Long> calculateUsersByActivity(BpmnModel bpmnModel, String activityId, String param, |
| 40 | Long startUserId, String processDefinitionId, Map<String, Object> processVariables) { | 45 | Long startUserId, String processDefinitionId, Map<String, Object> processVariables) { |
| 41 | - Object result = FlowableUtils.getExpressionValue(processVariables, param); | ||
| 42 | - return Convert.toSet(Long.class, result); | 46 | + Map<String, Object> variables = processVariables == null ? new HashMap<>() : processVariables; |
| 47 | + try { | ||
| 48 | + Object result = FlowableUtils.getExpressionValue(variables, param); | ||
| 49 | + return Convert.toSet(Long.class, result); | ||
| 50 | + } catch (FlowableException ex) { | ||
| 51 | + // 预测未运行的节点时候,表达式如果包含 execution 或者不存在的流程变量会抛异常, | ||
| 52 | + log.warn("[calculateUsersByActivity][表达式({}) 变量({}) 解析报错", param, variables, ex); | ||
| 53 | + // 不能预测候选人,返回空列表, 避免流程无法进行 | ||
| 54 | + return Sets.newHashSet(); | ||
| 55 | + } | ||
| 43 | } | 56 | } |
| 44 | 57 | ||
| 45 | } | 58 | } |
| 46 | \ No newline at end of file | 59 | \ No newline at end of file |