Commit 29a902f37ee7eede247527555c2d33b37a571763

Authored by lizhixian
1 parent 4b89f689

review: 代码审查

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
@@ -778,9 +778,16 @@ public class BpmnModelUtils { @@ -778,9 +778,16 @@ public class BpmnModelUtils {
778 if (currentElement instanceof ExclusiveGateway) { 778 if (currentElement instanceof ExclusiveGateway) {
779 // 查找满足条件的 SequenceFlow 路径 779 // 查找满足条件的 SequenceFlow 路径
780 Gateway gateway = (Gateway) currentElement; 780 Gateway gateway = (Gateway) currentElement;
781 - SequenceFlow matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(),  
782 - flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId())  
783 - && (evalConditionExpress(variables, flow.getConditionExpression()))); 781 + SequenceFlow matchSequenceFlow;
  782 + // 流程首次发起时,variables值一定为空,会导致条件表达式解析错误导致预测节点缺失
  783 + if (null == variables) {
  784 + matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(),
  785 + flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId()));
  786 + } else {
  787 + matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(),
  788 + flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId())
  789 + && (evalConditionExpress(variables, flow.getConditionExpression())));
  790 + }
784 if (matchSequenceFlow == null) { 791 if (matchSequenceFlow == null) {
785 matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(), 792 matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(),
786 flow -> ObjUtil.equal(gateway.getDefaultFlow(), flow.getId())); 793 flow -> ObjUtil.equal(gateway.getDefaultFlow(), flow.getId()));
@@ -800,9 +807,15 @@ public class BpmnModelUtils { @@ -800,9 +807,15 @@ public class BpmnModelUtils {
800 if (currentElement instanceof InclusiveGateway) { 807 if (currentElement instanceof InclusiveGateway) {
801 // 查找满足条件的 SequenceFlow 路径 808 // 查找满足条件的 SequenceFlow 路径
802 Gateway gateway = (Gateway) currentElement; 809 Gateway gateway = (Gateway) currentElement;
803 - Collection<SequenceFlow> matchSequenceFlows = CollUtil.filterNew(gateway.getOutgoingFlows(),  
804 - flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId())  
805 - && evalConditionExpress(variables, flow.getConditionExpression())); 810 + Collection<SequenceFlow> matchSequenceFlows;
  811 + if (null == variables){
  812 + matchSequenceFlows = CollUtil.filterNew(gateway.getOutgoingFlows(),
  813 + flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId()));
  814 + }else {
  815 + matchSequenceFlows = CollUtil.filterNew(gateway.getOutgoingFlows(),
  816 + flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId())
  817 + && evalConditionExpress(variables, flow.getConditionExpression()));
  818 + }
806 if (CollUtil.isEmpty(matchSequenceFlows)) { 819 if (CollUtil.isEmpty(matchSequenceFlows)) {
807 matchSequenceFlows = CollUtil.filterNew(gateway.getOutgoingFlows(), 820 matchSequenceFlows = CollUtil.filterNew(gateway.getOutgoingFlows(),
808 flow -> ObjUtil.equal(gateway.getDefaultFlow(), flow.getId())); 821 flow -> ObjUtil.equal(gateway.getDefaultFlow(), flow.getId()));
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
@@ -808,9 +808,15 @@ public class SimpleModelUtils { @@ -808,9 +808,15 @@ public class SimpleModelUtils {
808 // 情况:CONDITION_BRANCH_NODE 排它,只有一个满足条件的。如果没有,就走默认的 808 // 情况:CONDITION_BRANCH_NODE 排它,只有一个满足条件的。如果没有,就走默认的
809 if (nodeType == BpmSimpleModelNodeTypeEnum.CONDITION_BRANCH_NODE) { 809 if (nodeType == BpmSimpleModelNodeTypeEnum.CONDITION_BRANCH_NODE) {
810 // 查找满足条件的 BpmSimpleModelNodeVO 节点 810 // 查找满足条件的 BpmSimpleModelNodeVO 节点
811 - BpmSimpleModelNodeVO matchConditionNode = CollUtil.findOne(currentNode.getConditionNodes(),  
812 - conditionNode -> !BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow())  
813 - && evalConditionExpress(variables, conditionNode.getConditionSetting())); 811 + BpmSimpleModelNodeVO matchConditionNode;
  812 + if(null == variables) {
  813 + matchConditionNode = CollUtil.findOne(currentNode.getConditionNodes(),
  814 + conditionNode -> !BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow()));
  815 + }else {
  816 + matchConditionNode = CollUtil.findOne(currentNode.getConditionNodes(),
  817 + conditionNode -> !BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow())
  818 + && evalConditionExpress(variables, conditionNode.getConditionSetting()));
  819 + }
814 if (matchConditionNode == null) { 820 if (matchConditionNode == null) {
815 matchConditionNode = CollUtil.findOne(currentNode.getConditionNodes(), 821 matchConditionNode = CollUtil.findOne(currentNode.getConditionNodes(),
816 conditionNode -> BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow())); 822 conditionNode -> BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow()));
@@ -823,9 +829,15 @@ public class SimpleModelUtils { @@ -823,9 +829,15 @@ public class SimpleModelUtils {
823 // 情况:INCLUSIVE_BRANCH_NODE 包容,多个满足条件的。如果没有,就走默认的 829 // 情况:INCLUSIVE_BRANCH_NODE 包容,多个满足条件的。如果没有,就走默认的
824 if (nodeType == BpmSimpleModelNodeTypeEnum.INCLUSIVE_BRANCH_NODE) { 830 if (nodeType == BpmSimpleModelNodeTypeEnum.INCLUSIVE_BRANCH_NODE) {
825 // 查找满足条件的 BpmSimpleModelNodeVO 节点 831 // 查找满足条件的 BpmSimpleModelNodeVO 节点
826 - Collection<BpmSimpleModelNodeVO> matchConditionNodes = CollUtil.filterNew(currentNode.getConditionNodes(),  
827 - conditionNode -> !BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow())  
828 - && evalConditionExpress(variables, conditionNode.getConditionSetting())); 832 + Collection<BpmSimpleModelNodeVO> matchConditionNodes;
  833 + if (null == variables) {
  834 + matchConditionNodes = CollUtil.filterNew(currentNode.getConditionNodes(),
  835 + conditionNode -> !BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow()));
  836 + }else {
  837 + matchConditionNodes = CollUtil.filterNew(currentNode.getConditionNodes(),
  838 + conditionNode -> !BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow())
  839 + && evalConditionExpress(variables, conditionNode.getConditionSetting()));
  840 + }
829 if (CollUtil.isEmpty(matchConditionNodes)) { 841 if (CollUtil.isEmpty(matchConditionNodes)) {
830 matchConditionNodes = CollUtil.filterNew(currentNode.getConditionNodes(), 842 matchConditionNodes = CollUtil.filterNew(currentNode.getConditionNodes(),
831 conditionNode -> BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow())); 843 conditionNode -> BooleanUtil.isTrue(conditionNode.getConditionSetting().getDefaultFlow()));
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
@@ -208,11 +208,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -208,11 +208,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
208 // TODO @jason:有一个极端情况,如果一个用户有 2 个 task A 和 B,A 已经通过,B 需要审核。这个时,通过 A 进来,todo 拿到 208 // TODO @jason:有一个极端情况,如果一个用户有 2 个 task A 和 B,A 已经通过,B 需要审核。这个时,通过 A 进来,todo 拿到
209 // B,会不会表单权限不一致哈。 209 // B,会不会表单权限不一致哈。
210 BpmTaskRespVO todoTask = taskService.getFirstTodoTask(loginUserId, reqVO.getProcessInstanceId()); 210 BpmTaskRespVO todoTask = taskService.getFirstTodoTask(loginUserId, reqVO.getProcessInstanceId());
211 - // 3.2 流程首次发起时,variables值一定为空,会导致条件表达式解析错误导致预测节点缺失  
212 - if (null == processVariables) {  
213 - processVariables = new HashMap<>();  
214 - }  
215 - // 3.3 预测未运行节点的审批信息 211 + // 3.2 预测未运行节点的审批信息
216 List<ActivityNode> simulateActivityNodes = getSimulateApproveNodeList(startUserId, bpmnModel, 212 List<ActivityNode> simulateActivityNodes = getSimulateApproveNodeList(startUserId, bpmnModel,
217 processDefinitionInfo, 213 processDefinitionInfo,
218 processVariables, activities); 214 processVariables, activities);