Commit 6dfef298342cfb2a87e52ac3189a8e7b7d0f0ace

Authored by kehaiyou
1 parent aca65a66

feat: 控制查找子任务次数和清除递归代码

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
@@ -900,37 +900,26 @@ public class BpmTaskServiceImpl implements BpmTaskService { @@ -900,37 +900,26 @@ public class BpmTaskServiceImpl implements BpmTaskService {
900 Stack<String> stack = new Stack<>(); 900 Stack<String> stack = new Stack<>();
901 // 1.1 将根任务ID入栈 901 // 1.1 将根任务ID入栈
902 stack.push(parentTaskId); 902 stack.push(parentTaskId);
903 - while (!stack.isEmpty()) { 903 + //控制遍历的次数不超过 Byte.MAX_VALUE,避免脏数据造成死循环
  904 + int count = 0;
  905 + while (!stack.isEmpty() && count<Byte.MAX_VALUE) {
904 // 1.2 弹出栈顶任务ID 906 // 1.2 弹出栈顶任务ID
905 String taskId = stack.pop(); 907 String taskId = stack.pop();
906 // 1.3 将任务ID添加到结果集合中 908 // 1.3 将任务ID添加到结果集合中
907 allChildTaskIds.add(taskId); 909 allChildTaskIds.add(taskId);
908 // 1.4 获取该任务的子任务列表 910 // 1.4 获取该任务的子任务列表
909 List<String> childrenTaskIdList = getChildrenTaskIdList(taskId); 911 List<String> childrenTaskIdList = getChildrenTaskIdList(taskId);
910 - if (childrenTaskIdList != null && !childrenTaskIdList.isEmpty()) { 912 + if (CollUtil.isNotEmpty(childrenTaskIdList)) {
911 for (String childTaskId : childrenTaskIdList) { 913 for (String childTaskId : childrenTaskIdList) {
912 // 1.5 将子任务ID入栈,以便后续处理 914 // 1.5 将子任务ID入栈,以便后续处理
913 stack.push(childTaskId); 915 stack.push(childTaskId);
914 } 916 }
915 } 917 }
  918 + count++;
916 } 919 }
917 return allChildTaskIds; 920 return allChildTaskIds;
918 } 921 }
919 922
920 - /**  
921 - * 递归处理子级任务  
922 - *  
923 - * @param taskId 当前任务ID  
924 - * @param taskIds 结果  
925 - */  
926 - private void recursiveGetChildTaskIds(String taskId, List<String> taskIds) {  
927 - List<String> childrenTaskIdList = getChildrenTaskIdList(taskId);  
928 - for (String childTaskId : childrenTaskIdList) {  
929 - taskIds.add(childTaskId); // 将子任务的ID添加到集合中  
930 - recursiveGetChildTaskIds(childTaskId, taskIds); // 递归获取子任务的子任务  
931 - }  
932 - }  
933 -  
934 923
935 /** 924 /**
936 * 获取指定父级任务的所有子任务 ID 集合 925 * 获取指定父级任务的所有子任务 ID 集合