Commit 494b80d1ebae4099d719f671a4cdfe91313f5f16

Authored by lizhixian
1 parent 26dd8b66

review: 优化审批时,校验选择的下一个节点的审批人,是否合法

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)) {