Commit 494b80d1ebae4099d719f671a4cdfe91313f5f16
1 parent
26dd8b66
review: 优化审批时,校验选择的下一个节点的审批人,是否合法
Showing
3 changed files
with
19 additions
and
8 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.java
| @@ -907,9 +907,16 @@ public class BpmnModelUtils { | @@ -907,9 +907,16 @@ public class BpmnModelUtils { | ||
| 907 | * @return 符合条件的路径 | 907 | * @return 符合条件的路径 |
| 908 | */ | 908 | */ |
| 909 | private static SequenceFlow findMatchSequenceFlowByExclusiveGateway(Gateway gateway, Map<String, Object> variables) { | 909 | private static SequenceFlow findMatchSequenceFlowByExclusiveGateway(Gateway gateway, Map<String, Object> variables) { |
| 910 | - SequenceFlow matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(), | ||
| 911 | - flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId()) | ||
| 912 | - && (evalConditionExpress(variables, flow.getConditionExpression()))); | 910 | + // TODO 表单无可编辑字段时variables为空,流程走向会出现问题,比如流程审批过程中无需要修改的字段值, |
| 911 | + SequenceFlow matchSequenceFlow; | ||
| 912 | + if (CollUtil.isNotEmpty(variables)){ | ||
| 913 | + matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(), | ||
| 914 | + flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId()) | ||
| 915 | + && (evalConditionExpress(variables, flow.getConditionExpression()))); | ||
| 916 | + }else { | ||
| 917 | + matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(), | ||
| 918 | + flow -> ObjUtil.notEqual(gateway.getDefaultFlow(), flow.getId())); | ||
| 919 | + } | ||
| 913 | if (matchSequenceFlow == null) { | 920 | if (matchSequenceFlow == null) { |
| 914 | matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(), | 921 | matchSequenceFlow = CollUtil.findOne(gateway.getOutgoingFlows(), |
| 915 | flow -> ObjUtil.equal(gateway.getDefaultFlow(), flow.getId())); | 922 | 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/FlowableUtils.java
| @@ -194,7 +194,7 @@ public class FlowableUtils { | @@ -194,7 +194,7 @@ public class FlowableUtils { | ||
| 194 | @SuppressWarnings("unchecked") | 194 | @SuppressWarnings("unchecked") |
| 195 | public static Map<String, List<Long>> getStartUserSelectAssignees(Map<String, Object> processVariables) { | 195 | public static Map<String, List<Long>> getStartUserSelectAssignees(Map<String, Object> processVariables) { |
| 196 | if (processVariables == null) { | 196 | if (processVariables == null) { |
| 197 | - return new HashMap<>(); | 197 | + return null; |
| 198 | } | 198 | } |
| 199 | return (Map<String, List<Long>>) processVariables.get( | 199 | return (Map<String, List<Long>>) processVariables.get( |
| 200 | BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES); | 200 | BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES); |
| @@ -214,12 +214,12 @@ public class FlowableUtils { | @@ -214,12 +214,12 @@ public class FlowableUtils { | ||
| 214 | * 获得流程实例的审批用户选择的下一个节点的审批人 Map | 214 | * 获得流程实例的审批用户选择的下一个节点的审批人 Map |
| 215 | * | 215 | * |
| 216 | * @param processVariables 流程变量 | 216 | * @param processVariables 流程变量 |
| 217 | - * @return 审批用户选择的下一个节点的审批人Map | 217 | + * @return 审批用户选择的下一个节点的审批人Map Map |
| 218 | */ | 218 | */ |
| 219 | @SuppressWarnings("unchecked") | 219 | @SuppressWarnings("unchecked") |
| 220 | public static Map<String, List<Long>> getApproveUserSelectAssignees(Map<String, Object> processVariables) { | 220 | public static Map<String, List<Long>> getApproveUserSelectAssignees(Map<String, Object> processVariables) { |
| 221 | if (processVariables == null) { | 221 | if (processVariables == null) { |
| 222 | - return new HashMap<>(); | 222 | + return null; |
| 223 | } | 223 | } |
| 224 | return (Map<String, List<Long>>) processVariables.get( | 224 | return (Map<String, List<Long>>) processVariables.get( |
| 225 | BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_APPROVE_USER_SELECT_ASSIGNEES); | 225 | BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_APPROVE_USER_SELECT_ASSIGNEES); |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -600,7 +600,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -600,7 +600,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 600 | throw exception(PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_CONFIG, nextFlowNode.getName()); | 600 | throw exception(PROCESS_INSTANCE_START_USER_SELECT_ASSIGNEES_NOT_CONFIG, nextFlowNode.getName()); |
| 601 | } | 601 | } |
| 602 | processVariables = FlowableUtils.getStartUserSelectAssignees(processInstance.getProcessVariables()); | 602 | processVariables = FlowableUtils.getStartUserSelectAssignees(processInstance.getProcessVariables()); |
| 603 | - if (CollUtil.isNotEmpty(processVariables)) { | 603 | + if (processVariables == null){ |
| 604 | + processVariables = new HashMap<>(); | ||
| 605 | + }else { | ||
| 604 | List<Long> startUserSelectAssignee = processVariables.get(nextFlowNode.getId()); | 606 | List<Long> startUserSelectAssignee = processVariables.get(nextFlowNode.getId()); |
| 605 | // 特殊:如果当前节点已经存在审批人,则不允许覆盖 | 607 | // 特殊:如果当前节点已经存在审批人,则不允许覆盖 |
| 606 | if (CollUtil.isNotEmpty(startUserSelectAssignee)) { | 608 | if (CollUtil.isNotEmpty(startUserSelectAssignee)) { |
| @@ -619,7 +621,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -619,7 +621,9 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 619 | throw exception(PROCESS_INSTANCE_APPROVE_USER_SELECT_ASSIGNEES_NOT_CONFIG, nextFlowNode.getName()); | 621 | throw exception(PROCESS_INSTANCE_APPROVE_USER_SELECT_ASSIGNEES_NOT_CONFIG, nextFlowNode.getName()); |
| 620 | } | 622 | } |
| 621 | processVariables = FlowableUtils.getApproveUserSelectAssignees(processInstance.getProcessVariables()); | 623 | processVariables = FlowableUtils.getApproveUserSelectAssignees(processInstance.getProcessVariables()); |
| 622 | - if (CollUtil.isNotEmpty(processVariables)) { | 624 | + if (processVariables == null){ |
| 625 | + processVariables = new HashMap<>(); | ||
| 626 | + }else { | ||
| 623 | List<Long> approveUserSelectAssignee = processVariables.get(nextFlowNode.getId()); | 627 | List<Long> approveUserSelectAssignee = processVariables.get(nextFlowNode.getId()); |
| 624 | // 特殊:如果当前节点已经存在审批人,则不允许覆盖 | 628 | // 特殊:如果当前节点已经存在审批人,则不允许覆盖 |
| 625 | if (CollUtil.isNotEmpty(approveUserSelectAssignee)) { | 629 | if (CollUtil.isNotEmpty(approveUserSelectAssignee)) { |