Commit 6dfef298342cfb2a87e52ac3189a8e7b7d0f0ace
1 parent
aca65a66
feat: 控制查找子任务次数和清除递归代码
Showing
1 changed file
with
5 additions
and
16 deletions
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 | 900 | Stack<String> stack = new Stack<>(); |
| 901 | 901 | // 1.1 将根任务ID入栈 |
| 902 | 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 | 906 | // 1.2 弹出栈顶任务ID |
| 905 | 907 | String taskId = stack.pop(); |
| 906 | 908 | // 1.3 将任务ID添加到结果集合中 |
| 907 | 909 | allChildTaskIds.add(taskId); |
| 908 | 910 | // 1.4 获取该任务的子任务列表 |
| 909 | 911 | List<String> childrenTaskIdList = getChildrenTaskIdList(taskId); |
| 910 | - if (childrenTaskIdList != null && !childrenTaskIdList.isEmpty()) { | |
| 912 | + if (CollUtil.isNotEmpty(childrenTaskIdList)) { | |
| 911 | 913 | for (String childTaskId : childrenTaskIdList) { |
| 912 | 914 | // 1.5 将子任务ID入栈,以便后续处理 |
| 913 | 915 | stack.push(childTaskId); |
| 914 | 916 | } |
| 915 | 917 | } |
| 918 | + count++; | |
| 916 | 919 | } |
| 917 | 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 | 925 | * 获取指定父级任务的所有子任务 ID 集合 | ... | ... |