stalary commented on code in PR #10553:
URL: https://github.com/apache/dolphinscheduler/pull/10553#discussion_r909163623


##########
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessServiceImpl.java:
##########
@@ -2649,17 +2653,62 @@ public DAG<String, TaskNode, TaskNodeRelation> 
genDagGraph(ProcessDefinition pro
         return DagHelper.buildDagGraph(processDag);
     }
 
+    private void genSubTaskData(List<ProcessTaskRelation> taskRelations, 
List<TaskDefinitionLog> taskDefinitionLogList,
+                                List<TaskDefinition> taskDefinitions, 
List<TaskDefinition> curTaskDefinitions) {
+        List<TaskDefinition> copyList = new ArrayList<>(curTaskDefinitions);
+        for (TaskDefinition taskDefinition : copyList) {
+            if 
(TaskConstants.TASK_TYPE_SUB_PROCESS.equals(taskDefinition.getTaskType())) {
+                JsonNode processDefinitionCode = 
JSONUtils.parseObject(taskDefinition.getTaskParams())
+                    .findValue("processDefinitionCode");
+                long subProcessId = processDefinitionCode.asLong();
+                ProcessDefinition subProcess = 
processDefineMapper.queryByCode(subProcessId);
+                List<ProcessTaskRelation> subTaskRelations = 
findRelationByCode(subProcess.getCode(), subProcess.getVersion());
+                // bind to subProcess
+                for (ProcessTaskRelation subTaskRelation : subTaskRelations) {
+                    if (subTaskRelation.getPreTaskCode() == 0) {
+                        
subTaskRelation.setPreTaskCode(taskDefinition.getCode());
+                        
subTaskRelation.setPreTaskVersion(taskDefinition.getVersion());
+                    }
+                    TaskDefinition subTask = 
findTaskDefinition(subTaskRelation.getPostTaskCode(), 
subTaskRelation.getPostTaskVersion());
+                    // recursive expansion
+                    if 
(TaskConstants.TASK_TYPE_SUB_PROCESS.equals(subTask.getTaskType())) {
+                        genSubTaskData(taskRelations, taskDefinitionLogList, 
taskDefinitions, Lists.newArrayList(subTask));
+                    }
+                }
+                List<TaskDefinitionLog> subTaskDefinitionLogList = 
genTaskDefineList(subTaskRelations);
+                // deletes an expansion task
+                subTaskDefinitionLogList.removeIf(task -> task.getCode() == 
taskDefinition.getCode());
+                List<TaskDefinition> subTaskDefinitions = 
subTaskDefinitionLogList.stream().map(taskDefinitionLog -> {
+                    taskDefinitionLog.setExpansion(true);
+                    return (TaskDefinition) taskDefinitionLog;
+                }).collect(Collectors.toList());
+                taskRelations.addAll(subTaskRelations);
+                taskDefinitionLogList.addAll(subTaskDefinitionLogList);
+                taskDefinitions.addAll(subTaskDefinitions);
+            }
+        }
+    }
+
     /**
      * generate DagData
      */
     @Override
-    public DagData genDagData(ProcessDefinition processDefinition) {
-        List<ProcessTaskRelation> taskRelations = 
this.findRelationByCode(processDefinition.getCode(), 
processDefinition.getVersion());
+    public DagData genDagData(ProcessDefinition processDefinition, boolean 
showSubTask) {
+        List<ProcessTaskRelation> taskRelations = 
findRelationByCode(processDefinition.getCode(), processDefinition.getVersion());
         List<TaskDefinitionLog> taskDefinitionLogList = 
genTaskDefineList(taskRelations);
-        List<TaskDefinition> taskDefinitions = 
taskDefinitionLogList.stream().map(t -> (TaskDefinition) 
t).collect(Collectors.toList());
+        List<TaskDefinition> taskDefinitions = 
taskDefinitionLogList.stream().map(TaskDefinition.class::cast).collect(Collectors.toList());
+        // when enable showSubTask try to find sub-process task info.
+        if (showSubTask) {
+            genSubTaskData(taskRelations, taskDefinitionLogList, 
taskDefinitions, taskDefinitions);

Review Comment:
   One save all data, and the other save the current data when recursively.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to