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

This commit is contained in:
kehaiyou 2023-10-21 18:31:30 +08:00
parent aca65a66b5
commit 6dfef29834

View File

@ -900,37 +900,26 @@ public class BpmTaskServiceImpl implements BpmTaskService {
Stack<String> stack = new Stack<>(); Stack<String> stack = new Stack<>();
// 1.1 将根任务ID入栈 // 1.1 将根任务ID入栈
stack.push(parentTaskId); stack.push(parentTaskId);
while (!stack.isEmpty()) { //控制遍历的次数不超过 Byte.MAX_VALUE避免脏数据造成死循环
int count = 0;
while (!stack.isEmpty() && count<Byte.MAX_VALUE) {
// 1.2 弹出栈顶任务ID // 1.2 弹出栈顶任务ID
String taskId = stack.pop(); String taskId = stack.pop();
// 1.3 将任务ID添加到结果集合中 // 1.3 将任务ID添加到结果集合中
allChildTaskIds.add(taskId); allChildTaskIds.add(taskId);
// 1.4 获取该任务的子任务列表 // 1.4 获取该任务的子任务列表
List<String> childrenTaskIdList = getChildrenTaskIdList(taskId); List<String> childrenTaskIdList = getChildrenTaskIdList(taskId);
if (childrenTaskIdList != null && !childrenTaskIdList.isEmpty()) { if (CollUtil.isNotEmpty(childrenTaskIdList)) {
for (String childTaskId : childrenTaskIdList) { for (String childTaskId : childrenTaskIdList) {
// 1.5 将子任务ID入栈以便后续处理 // 1.5 将子任务ID入栈以便后续处理
stack.push(childTaskId); stack.push(childTaskId);
} }
} }
count++;
} }
return allChildTaskIds; return allChildTaskIds;
} }
/**
* 递归处理子级任务
*
* @param taskId 当前任务ID
* @param taskIds 结果
*/
private void recursiveGetChildTaskIds(String taskId, List<String> taskIds) {
List<String> childrenTaskIdList = getChildrenTaskIdList(taskId);
for (String childTaskId : childrenTaskIdList) {
taskIds.add(childTaskId); // 将子任务的ID添加到集合中
recursiveGetChildTaskIds(childTaskId, taskIds); // 递归获取子任务的子任务
}
}
/** /**
* 获取指定父级任务的所有子任务 ID 集合 * 获取指定父级任务的所有子任务 ID 集合