This is an automated email from the ASF dual-hosted git repository.

zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 50923e7d2d [Improvement-16887][Dependent Task] Dependent task 
improvement (#16910)
50923e7d2d is described below

commit 50923e7d2d337db8cc62de9c8fe1d8f4ebacac1c
Author: xiangzihao <[email protected]>
AuthorDate: Thu Jan 2 17:03:25 2025 +0800

    [Improvement-16887][Dependent Task] Dependent task improvement (#16910)
---
 .../service/impl/WorkflowInstanceServiceImpl.java  |  64 +++++++++--
 .../api/service/WorkflowInstanceServiceTest.java   |  24 +++++
 .../common/constants/Constants.java                |   6 +-
 .../dolphinscheduler/common/enums/ContextType.java |  27 ++---
 .../dao/entity/AbstractTaskInstanceContext.java    |  23 ++--
 .../entity/DependentResultTaskInstanceContext.java |  35 +++---
 .../dao/entity/TaskDefinition.java                 |   5 -
 .../dao/entity/TaskDefinitionLog.java              |  19 +---
 .../dao/entity/TaskInstanceContext.java            |  56 ++++++++++
 .../dao/entity/TaskInstanceDependentDetails.java   |  23 ++--
 .../dao/mapper/TaskInstanceContextMapper.java      |  43 ++++++++
 .../dao/model/ITaskInstanceContext.java            |  23 ++--
 .../dao/repository/TaskInstanceContextDao.java     |  37 +++++++
 .../impl/TaskInstanceContextDaoImpl.java           | 106 ++++++++++++++++++
 .../dao/mapper/TaskInstanceContextMapper.xml       |  69 ++++++++++++
 .../src/main/resources/sql/dolphinscheduler_h2.sql |  14 +++
 .../main/resources/sql/dolphinscheduler_mysql.sql  |  15 +++
 .../resources/sql/dolphinscheduler_postgresql.sql  |  16 +++
 .../3.3.0_schema/mysql/dolphinscheduler_ddl.sql    |  12 +++
 .../postgresql/dolphinscheduler_ddl.sql            |  12 +++
 .../plugin/condition/ConditionLogicTask.java       |   7 +-
 .../plugin/dependent/DependentLogicTask.java       |   7 +-
 .../dependent/DependentLogicTaskPluginFactory.java |  11 +-
 .../plugin/dependent/DependentTaskTracker.java     | 120 +++++++++++++++------
 .../server/master/utils/DependentExecute.java      |  18 +---
 .../src/main/resources/logback-spring.xml          |   2 +
 .../plugin/task/api/enums/DependResult.java        |   3 -
 .../plugin/task/api/enums/DependentRelation.java   |   3 -
 .../{DependentRelation.java => DependentType.java} |   8 +-
 .../ConditionDependentItem.java}                   |  22 ++--
 .../ConditionDependentTaskModel.java}              |  24 ++---
 .../plugin/task/api/model/DependentItem.java       |  19 +++-
 .../task/api/parameters/ConditionsParameters.java  |   6 +-
 .../task/components/node/fields/use-dependent.ts   |  52 +++++----
 .../workflow/components/dag/use-node-status.ts     |  13 ++-
 35 files changed, 727 insertions(+), 217 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowInstanceServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowInstanceServiceImpl.java
index 28c20b93ce..f92000a3a2 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowInstanceServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowInstanceServiceImpl.java
@@ -45,6 +45,7 @@ import org.apache.dolphinscheduler.api.utils.PageInfo;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.CommandKeyConstants;
 import org.apache.dolphinscheduler.common.constants.Constants;
+import org.apache.dolphinscheduler.common.enums.ContextType;
 import org.apache.dolphinscheduler.common.enums.Flag;
 import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus;
 import org.apache.dolphinscheduler.common.graph.DAG;
@@ -53,11 +54,14 @@ import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.common.utils.placeholder.BusinessTimeUtils;
 import org.apache.dolphinscheduler.dao.AlertDao;
+import org.apache.dolphinscheduler.dao.entity.AbstractTaskInstanceContext;
 import org.apache.dolphinscheduler.dao.entity.Project;
 import org.apache.dolphinscheduler.dao.entity.RelationSubWorkflow;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
 import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceContext;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceDependentDetails;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.entity.WorkflowDefinition;
 import org.apache.dolphinscheduler.dao.entity.WorkflowInstance;
@@ -70,6 +74,8 @@ import 
org.apache.dolphinscheduler.dao.mapper.TaskInstanceMapper;
 import org.apache.dolphinscheduler.dao.mapper.WorkflowDefinitionLogMapper;
 import org.apache.dolphinscheduler.dao.mapper.WorkflowDefinitionMapper;
 import org.apache.dolphinscheduler.dao.mapper.WorkflowInstanceMapper;
+import org.apache.dolphinscheduler.dao.model.ITaskInstanceContext;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceContextDao;
 import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceMapDao;
@@ -96,6 +102,7 @@ import java.util.stream.Collectors;
 
 import lombok.extern.slf4j.Slf4j;
 
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -174,6 +181,9 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
     @Autowired
     private CuringParamsService curingGlobalParamsService;
 
+    @Autowired
+    private TaskInstanceContextDao taskInstanceContextDao;
+
     /**
      * return top n SUCCESS workflow instance order by running time which 
started between startTime and endTime
      */
@@ -184,7 +194,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         // check user access for project
         Map<String, Object> result =
                 projectService.checkProjectAndAuth(loginUser, project, 
projectCode,
-                        ApiFuncIdentificationConstant.WORKFLOW_INSTANCE);
+                        WORKFLOW_INSTANCE);
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return result;
         }
@@ -233,7 +243,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         // check user access for project
         Map<String, Object> result =
                 projectService.checkProjectAndAuth(loginUser, project, 
projectCode,
-                        ApiFuncIdentificationConstant.WORKFLOW_INSTANCE);
+                        WORKFLOW_INSTANCE);
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return result;
         }
@@ -245,7 +255,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
                         workflowInstance.getWorkflowDefinitionVersion());
 
         if (workflowDefinition == null || projectCode != 
workflowDefinition.getProjectCode()) {
-            log.error("workflow definition does not exist, projectCode:{}.", 
projectCode);
+            log.error("workflow definition does not exist, projectCode: {}.", 
projectCode);
             putMsg(result, Status.WORKFLOW_DEFINITION_NOT_EXIST, 
workflowInstanceId);
         } else {
             workflowInstance.setLocations(workflowDefinition.getLocations());
@@ -443,7 +453,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         // check user access for project
         Map<String, Object> result =
                 projectService.checkProjectAndAuth(loginUser, project, 
projectCode,
-                        ApiFuncIdentificationConstant.WORKFLOW_INSTANCE);
+                        WORKFLOW_INSTANCE);
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return result;
         }
@@ -460,15 +470,47 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         List<TaskInstance> taskInstanceList =
                 
taskInstanceDao.queryValidTaskListByWorkflowInstanceId(workflowInstanceId,
                         workflowInstance.getTestFlag());
+        List<TaskInstanceDependentDetails<ITaskInstanceContext>> 
taskInstanceDependentDetailsList =
+                setTaskInstanceDependentResult(taskInstanceList);
+
         Map<String, Object> resultMap = new HashMap<>();
         resultMap.put(WORKFLOW_INSTANCE_STATE, 
workflowInstance.getState().toString());
-        resultMap.put(TASK_LIST, taskInstanceList);
+        resultMap.put(TASK_LIST, taskInstanceDependentDetailsList);
         result.put(DATA_LIST, resultMap);
 
         putMsg(result, Status.SUCCESS);
         return result;
     }
 
+    private List<TaskInstanceDependentDetails<ITaskInstanceContext>> 
setTaskInstanceDependentResult(List<TaskInstance> taskInstanceList) {
+        List<TaskInstanceDependentDetails<ITaskInstanceContext>> 
taskInstanceDependentDetailsList =
+                taskInstanceList.stream()
+                        .map(taskInstance -> {
+                            TaskInstanceDependentDetails<ITaskInstanceContext> 
taskInstanceDependentDetails =
+                                    new TaskInstanceDependentDetails<>();
+                            BeanUtils.copyProperties(taskInstance, 
taskInstanceDependentDetails);
+                            return taskInstanceDependentDetails;
+                        }).collect(Collectors.toList());
+        List<Integer> taskInstanceIdList = taskInstanceList.stream()
+                .map(TaskInstance::getId).collect(Collectors.toList());
+        List<TaskInstanceContext> taskInstanceContextList =
+                
taskInstanceContextDao.batchQueryByTaskInstanceIdsAndContextType(taskInstanceIdList,
+                        ContextType.DEPENDENT_RESULT_CONTEXT);
+        for (TaskInstanceContext taskInstanceContext : 
taskInstanceContextList) {
+            for (AbstractTaskInstanceContext 
dependentResultTaskInstanceContext : taskInstanceContext
+                    .getTaskInstanceContext()) {
+                for (TaskInstanceDependentDetails<ITaskInstanceContext> 
taskInstanceDependentDetails : taskInstanceDependentDetailsList) {
+                    if 
(taskInstanceDependentDetails.getId().equals(taskInstanceContext.getTaskInstanceId()))
 {
+                        taskInstanceDependentDetails
+                                .setTaskInstanceDependentResult(
+                                        dependentResultTaskInstanceContext);
+                    }
+                }
+            }
+        }
+        return taskInstanceDependentDetailsList;
+    }
+
     @Override
     public List<DynamicSubWorkflowDto> queryDynamicSubWorkflowInstances(User 
loginUser, Integer taskId) {
         TaskInstance taskInstance = taskInstanceDao.queryById(taskId);
@@ -488,7 +530,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
                 .queryAllSubWorkflowInstance((long) 
taskInstance.getWorkflowInstanceId(),
                         taskInstance.getTaskCode());
         List<Long> allSubWorkflowInstanceId = relationSubWorkflows.stream()
-                
.map(RelationSubWorkflow::getSubWorkflowInstanceId).collect(java.util.stream.Collectors.toList());
+                
.map(RelationSubWorkflow::getSubWorkflowInstanceId).collect(Collectors.toList());
         List<WorkflowInstance> allSubWorkflows = 
workflowInstanceDao.queryByIds(allSubWorkflowInstanceId);
 
         if (allSubWorkflows == null || allSubWorkflows.isEmpty()) {
@@ -539,7 +581,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         // check user access for project
         Map<String, Object> result =
                 projectService.checkProjectAndAuth(loginUser, project, 
projectCode,
-                        ApiFuncIdentificationConstant.WORKFLOW_INSTANCE);
+                        WORKFLOW_INSTANCE);
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return result;
         }
@@ -693,7 +735,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
                     "Update task relations complete, projectCode:{}, 
workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
                     projectCode, workflowDefinition.getCode(), insertVersion);
             putMsg(result, Status.SUCCESS);
-            result.put(Constants.DATA_LIST, workflowDefinition);
+            result.put(DATA_LIST, workflowDefinition);
         } else {
             log.info(
                     "Update task relations error, projectCode:{}, 
workflowDefinitionCode:{}, workflowDefinitionVersion:{}.",
@@ -750,7 +792,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         // check user access for project
         Map<String, Object> result =
                 projectService.checkProjectAndAuth(loginUser, project, 
projectCode,
-                        ApiFuncIdentificationConstant.WORKFLOW_INSTANCE);
+                        WORKFLOW_INSTANCE);
         if (result.get(Constants.STATUS) != Status.SUCCESS) {
             return result;
         }
@@ -824,7 +866,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         if (workflowInstance == null) {
             log.error("workflow instance does not exist, projectCode:{}, 
workflowInstanceId:{}.", projectCode,
                     workflowInstanceId);
-            putMsg(result, Status.WORKFLOW_INSTANCE_NOT_EXIST, 
workflowInstanceId);
+            putMsg(result, WORKFLOW_INSTANCE_NOT_EXIST, workflowInstanceId);
             return result;
         }
 
@@ -918,7 +960,7 @@ public class WorkflowInstanceServiceImpl extends 
BaseServiceImpl implements Work
         if (workflowInstance == null) {
             log.error("workflow instance does not exist, projectCode:{}, 
workflowInstanceId:{}.", projectCode,
                     workflowInstanceId);
-            putMsg(result, Status.WORKFLOW_INSTANCE_NOT_EXIST, 
workflowInstanceId);
+            putMsg(result, WORKFLOW_INSTANCE_NOT_EXIST, workflowInstanceId);
             return result;
         }
 
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowInstanceServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowInstanceServiceTest.java
index 5d075e09ef..9395e471ee 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowInstanceServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowInstanceServiceTest.java
@@ -34,6 +34,7 @@ import 
org.apache.dolphinscheduler.api.service.impl.WorkflowInstanceServiceImpl;
 import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.enums.CommandType;
+import org.apache.dolphinscheduler.common.enums.ContextType;
 import org.apache.dolphinscheduler.common.enums.Flag;
 import org.apache.dolphinscheduler.common.enums.UserType;
 import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus;
@@ -42,10 +43,12 @@ import 
org.apache.dolphinscheduler.common.model.TaskNodeRelation;
 import org.apache.dolphinscheduler.common.utils.DateUtils;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.dao.AlertDao;
+import 
org.apache.dolphinscheduler.dao.entity.DependentResultTaskInstanceContext;
 import org.apache.dolphinscheduler.dao.entity.Project;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog;
 import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceContext;
 import org.apache.dolphinscheduler.dao.entity.Tenant;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.entity.WorkerGroup;
@@ -60,10 +63,12 @@ import org.apache.dolphinscheduler.dao.mapper.TenantMapper;
 import org.apache.dolphinscheduler.dao.mapper.WorkflowDefinitionLogMapper;
 import org.apache.dolphinscheduler.dao.mapper.WorkflowDefinitionMapper;
 import org.apache.dolphinscheduler.dao.mapper.WorkflowInstanceMapper;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceContextDao;
 import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceMapDao;
 import org.apache.dolphinscheduler.plugin.task.api.TaskPluginManager;
+import org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
 import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
 import org.apache.dolphinscheduler.service.expand.CuringParamsService;
 import org.apache.dolphinscheduler.service.model.TaskNode;
@@ -90,6 +95,7 @@ import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
 
 @ExtendWith(MockitoExtension.class)
 @MockitoSettings(strictness = Strictness.LENIENT)
@@ -154,6 +160,9 @@ public class WorkflowInstanceServiceTest {
     @Mock
     private WorkflowInstanceMapDao workflowInstanceMapDao;
 
+    @Mock
+    private TaskInstanceContextDao taskInstanceContextDao;
+
     private String shellJson = 
"[{\"name\":\"\",\"preTaskCode\":0,\"preTaskVersion\":0,\"postTaskCode\":123456789,"
             + 
"\"postTaskVersion\":1,\"conditionType\":0,\"conditionParams\":\"{}\"},{\"name\":\"\",\"preTaskCode\":123456789,"
             + 
"\"preTaskVersion\":1,\"postTaskCode\":123451234,\"postTaskVersion\":1,\"conditionType\":0,\"conditionParams\":\"{}\"}]";
@@ -465,6 +474,18 @@ public class WorkflowInstanceServiceTest {
         taskInstance.setTaskType("SHELL");
         List<TaskInstance> taskInstanceList = new ArrayList<>();
         taskInstanceList.add(taskInstance);
+        List<DependentResultTaskInstanceContext> 
dependentResultTaskInstanceContextList = new ArrayList<>();
+        TaskInstanceContext taskInstanceContext = new TaskInstanceContext();
+        taskInstanceContext.setTaskInstanceId(0);
+        
taskInstanceContext.setContextType(ContextType.DEPENDENT_RESULT_CONTEXT);
+        DependentResultTaskInstanceContext dependentResultTaskInstanceContext =
+                new DependentResultTaskInstanceContext();
+        dependentResultTaskInstanceContext.setProjectCode(projectCode);
+        
dependentResultTaskInstanceContext.setDependentResult(DependResult.SUCCESS);
+        taskInstanceContext.setTaskInstanceContext(
+                Lists.asList(dependentResultTaskInstanceContext, new 
DependentResultTaskInstanceContext[0]));
+        List<Integer> taskInstanceIdList = new ArrayList<>();
+        taskInstanceIdList.add(0);
         Result res = new Result();
         res.setCode(Status.SUCCESS.ordinal());
         res.setData("xxx");
@@ -476,6 +497,9 @@ public class WorkflowInstanceServiceTest {
                 workflowInstance.getTestFlag()))
                         .thenReturn(taskInstanceList);
         when(loggerService.queryLog(loginUser, taskInstance.getId(), 0, 
4098)).thenReturn(res);
+        
when(taskInstanceContextDao.batchQueryByTaskInstanceIdsAndContextType(taskInstanceIdList,
+                ContextType.DEPENDENT_RESULT_CONTEXT))
+                        .thenReturn(Lists.asList(taskInstanceContext, new 
TaskInstanceContext[0]));
         Map<String, Object> successRes =
                 
workflowInstanceService.queryTaskListByWorkflowInstanceId(loginUser, 
projectCode, 1);
         Assertions.assertEquals(Status.SUCCESS, 
successRes.get(Constants.STATUS));
diff --git 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
index c5c64d5565..7d365bf86f 100644
--- 
a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/constants/Constants.java
@@ -284,11 +284,13 @@ public final class Constants {
     public static final String SUBWORKFLOW_INSTANCE_ID = 
"subWorkflowInstanceId";
     public static final String WORKFLOW_INSTANCE_STATE = 
"workflowInstanceState";
     public static final String PARENT_WORKFLOW_INSTANCE = 
"parentWorkflowInstance";
-    public static final String DEPENDENCE = "dependence";
     public static final String TASK_LIST = "taskList";
     public static final String QUEUE = "queue";
     public static final String QUEUE_NAME = "queueName";
-    public static final String DEPENDENT_SPLIT = ":||";
+
+    /**
+     * dependent task
+     */
     public static final long DEPENDENT_ALL_TASK_CODE = -1;
     public static final long DEPENDENT_WORKFLOW_CODE = 0;
 
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ContextType.java
similarity index 67%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ContextType.java
index 539f2e5712..e5275a801b 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/enums/ContextType.java
@@ -15,18 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.common.enums;
 
-/**
- * depend result
- */
-public enum DependResult {
+import lombok.Getter;
+
+@Getter
+public enum ContextType {
+
+    DEPENDENT_RESULT_CONTEXT;
 
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
+    public static ContextType of(String name) {
+        for (ContextType contextType : values()) {
+            if (contextType.name().equalsIgnoreCase(name)) {
+                return contextType;
+            }
+        }
+        return null;
+    }
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AbstractTaskInstanceContext.java
similarity index 68%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AbstractTaskInstanceContext.java
index 539f2e5712..af89dcfe20 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/AbstractTaskInstanceContext.java
@@ -15,18 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.dao.entity;
 
-/**
- * depend result
- */
-public enum DependResult {
+import org.apache.dolphinscheduler.common.enums.ContextType;
+import org.apache.dolphinscheduler.dao.model.ITaskInstanceContext;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+public abstract class AbstractTaskInstanceContext implements 
ITaskInstanceContext {
 
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
+    protected ContextType contextType;
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DependentResultTaskInstanceContext.java
similarity index 59%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DependentResultTaskInstanceContext.java
index 539f2e5712..4589922fd0 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/DependentResultTaskInstanceContext.java
@@ -15,18 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.dao.entity;
+
+import org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+public class DependentResultTaskInstanceContext extends 
AbstractTaskInstanceContext {
+
+    private Long projectCode;
+
+    private Long workflowDefinitionCode;
+
+    private Long taskDefinitionCode;
+
+    private String dateCycle;
+
+    private DependResult dependentResult;
 
-/**
- * depend result
- */
-public enum DependResult {
-
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
 }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
index 064082e741..45d5738ae7 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinition.java
@@ -17,7 +17,6 @@
 
 package org.apache.dolphinscheduler.dao.entity;
 
-import org.apache.dolphinscheduler.common.constants.Constants;
 import org.apache.dolphinscheduler.common.enums.Flag;
 import org.apache.dolphinscheduler.common.enums.Priority;
 import org.apache.dolphinscheduler.common.enums.TaskExecuteType;
@@ -259,10 +258,6 @@ public class TaskDefinition {
         return taskParamMap;
     }
 
-    public String getDependence() {
-        return JSONUtils.getNodeString(this.taskParams, Constants.DEPENDENCE);
-    }
-
     public Integer getCpuQuota() {
         return cpuQuota == null ? -1 : cpuQuota;
     }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
index 48e24576f5..2eca1abcf3 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskDefinitionLog.java
@@ -19,11 +19,14 @@ package org.apache.dolphinscheduler.dao.entity;
 
 import java.util.Date;
 
+import lombok.Data;
+
 import com.baomidou.mybatisplus.annotation.TableName;
 
 /**
  * task definition log
  */
+@Data
 @TableName("t_ds_task_definition_log")
 public class TaskDefinitionLog extends TaskDefinition {
 
@@ -77,22 +80,6 @@ public class TaskDefinitionLog extends TaskDefinition {
         this.setTaskExecuteType(taskDefinition.getTaskExecuteType());
     }
 
-    public int getOperator() {
-        return operator;
-    }
-
-    public void setOperator(int operator) {
-        this.operator = operator;
-    }
-
-    public Date getOperateTime() {
-        return operateTime;
-    }
-
-    public void setOperateTime(Date operateTime) {
-        this.operateTime = operateTime;
-    }
-
     @Override
     public boolean equals(Object o) {
         return super.equals(o);
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceContext.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceContext.java
new file mode 100644
index 0000000000..d303320d4c
--- /dev/null
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceContext.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.entity;
+
+import org.apache.dolphinscheduler.common.enums.ContextType;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+
+import java.util.Date;
+import java.util.List;
+
+import lombok.Data;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+@Data
+@TableName("t_ds_task_instance_context")
+public class TaskInstanceContext {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer taskInstanceId;
+
+    private String context;
+
+    private ContextType contextType;
+
+    private Date createTime;
+
+    private Date updateTime;
+
+    public void setTaskInstanceContext(List<AbstractTaskInstanceContext> 
taskInstanceContexts) {
+        this.context = JSONUtils.toJsonString(taskInstanceContexts);
+    }
+
+    public List<AbstractTaskInstanceContext> getTaskInstanceContext() {
+        return JSONUtils.toList(context, AbstractTaskInstanceContext.class);
+    }
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceDependentDetails.java
similarity index 69%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceDependentDetails.java
index 539f2e5712..2efa687ce2 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/TaskInstanceDependentDetails.java
@@ -15,18 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.dao.entity;
 
-/**
- * depend result
- */
-public enum DependResult {
+import org.apache.dolphinscheduler.dao.model.ITaskInstanceContext;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class TaskInstanceDependentDetails<T extends ITaskInstanceContext> 
extends TaskInstance {
+
+    private T taskInstanceDependentResult;
 
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
 }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceContextMapper.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceContextMapper.java
new file mode 100644
index 0000000000..70490a43b8
--- /dev/null
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/TaskInstanceContextMapper.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.mapper;
+
+import org.apache.dolphinscheduler.common.enums.ContextType;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceContext;
+
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface TaskInstanceContextMapper extends 
BaseMapper<TaskInstanceContext> {
+
+    List<TaskInstanceContext> 
queryListByTaskInstanceIdAndContextType(@Param("taskInstanceId") int 
taskInstanceId,
+                                                                      
@Param("contextType") ContextType contextType);
+
+    int deleteByTaskInstanceIdAndContextType(@Param("taskInstanceId") int 
taskInstanceId,
+                                             @Param("contextType") ContextType 
contextType);
+
+    int 
updateTaskInstanceContextByTaskInstanceIdAndContextType(@Param("taskInstanceId")
 int taskInstanceId,
+                                                                
@Param("contextType") ContextType contextType,
+                                                                
@Param("context") String context);
+
+    List<TaskInstanceContext> 
batchQueryByTaskInstanceIdsAndContextType(@Param("taskInstanceIds") 
List<Integer> taskInstanceIds,
+                                                                        
@Param("contextType") ContextType contextType);
+}
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/model/ITaskInstanceContext.java
similarity index 59%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/model/ITaskInstanceContext.java
index 539f2e5712..973b416dc3 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/model/ITaskInstanceContext.java
@@ -15,18 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.dao.model;
 
-/**
- * depend result
- */
-public enum DependResult {
+import 
org.apache.dolphinscheduler.dao.entity.DependentResultTaskInstanceContext;
+
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "contextType", include = 
JsonTypeInfo.As.EXISTING_PROPERTY, visible = true)
+@JsonSubTypes({
+        @JsonSubTypes.Type(value = DependentResultTaskInstanceContext.class, 
name = "DEPENDENT_RESULT_CONTEXT")
+})
+public interface ITaskInstanceContext {
 
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
 }
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TaskInstanceContextDao.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TaskInstanceContextDao.java
new file mode 100644
index 0000000000..9fcdec80f3
--- /dev/null
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/TaskInstanceContextDao.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.repository;
+
+import org.apache.dolphinscheduler.common.enums.ContextType;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceContext;
+
+import java.util.List;
+
+public interface TaskInstanceContextDao extends IDao<TaskInstanceContext> {
+
+    List<TaskInstanceContext> queryListByTaskInstanceIdAndContextType(Integer 
taskInstanceId,
+                                                                      
ContextType contextType);
+
+    int deleteByTaskInstanceIdAndContextType(Integer taskInstanceId,
+                                             ContextType contextType);
+
+    int upsertTaskInstanceContext(TaskInstanceContext taskDependentResult);
+
+    List<TaskInstanceContext> 
batchQueryByTaskInstanceIdsAndContextType(List<Integer> taskInstanceIds,
+                                                                        
ContextType contextType);
+}
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TaskInstanceContextDaoImpl.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TaskInstanceContextDaoImpl.java
new file mode 100644
index 0000000000..089ab95d5c
--- /dev/null
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/TaskInstanceContextDaoImpl.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.dao.repository.impl;
+
+import org.apache.dolphinscheduler.common.constants.Constants;
+import org.apache.dolphinscheduler.common.enums.ContextType;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.dao.entity.AbstractTaskInstanceContext;
+import 
org.apache.dolphinscheduler.dao.entity.DependentResultTaskInstanceContext;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceContext;
+import org.apache.dolphinscheduler.dao.mapper.TaskInstanceContextMapper;
+import org.apache.dolphinscheduler.dao.repository.BaseDao;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceContextDao;
+
+import org.apache.commons.collections4.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class TaskInstanceContextDaoImpl extends BaseDao<TaskInstanceContext, 
TaskInstanceContextMapper>
+        implements
+            TaskInstanceContextDao {
+
+    public TaskInstanceContextDaoImpl(TaskInstanceContextMapper 
taskInstanceContextMapper) {
+        super(taskInstanceContextMapper);
+    }
+
+    @Override
+    public List<TaskInstanceContext> 
queryListByTaskInstanceIdAndContextType(Integer taskInstanceId,
+                                                                             
ContextType contextType) {
+        if (taskInstanceId == null) {
+            return Collections.emptyList();
+        }
+        return 
mybatisMapper.queryListByTaskInstanceIdAndContextType(taskInstanceId, 
contextType);
+    }
+
+    @Override
+    public int deleteByTaskInstanceIdAndContextType(Integer taskInstanceId, 
ContextType contextType) {
+        if (taskInstanceId == null) {
+            throw new IllegalArgumentException("taskInstanceId cannot be 
null");
+        }
+        return 
mybatisMapper.deleteByTaskInstanceIdAndContextType(taskInstanceId, contextType);
+    }
+
+    @Override
+    public int upsertTaskInstanceContext(TaskInstanceContext 
taskInstanceContext) {
+        if (taskInstanceContext == null) {
+            return 0;
+        }
+        TaskInstanceContext dbTaskInstanceContext =
+                
mybatisMapper.queryListByTaskInstanceIdAndContextType(taskInstanceContext.getTaskInstanceId(),
+                        
taskInstanceContext.getContextType()).stream().findFirst().orElse(null);
+        if (dbTaskInstanceContext == null) {
+            return mybatisMapper.insert(taskInstanceContext);
+        } else {
+            List<AbstractTaskInstanceContext> 
dbDependentResultTaskInstanceContextList =
+                    dbTaskInstanceContext.getTaskInstanceContext();
+            
dbDependentResultTaskInstanceContextList.addAll(taskInstanceContext.getTaskInstanceContext());
+            List<AbstractTaskInstanceContext> 
deduplicatedDependentResultTaskInstanceContextList =
+                    dbDependentResultTaskInstanceContextList.stream()
+                            
.map(DependentResultTaskInstanceContext.class::cast)
+                            .collect(Collectors.collectingAndThen(
+                                    Collectors.toCollection(() -> new 
TreeSet<>(Comparator.comparing(
+                                            o -> o.getProjectCode() + 
Constants.UNDERLINE
+                                                    + 
o.getWorkflowDefinitionCode() + Constants.UNDERLINE
+                                                    + 
o.getTaskDefinitionCode() + Constants.UNDERLINE
+                                                    + o.getDateCycle()))),
+                                    ArrayList::new));
+            
taskInstanceContext.setTaskInstanceContext(deduplicatedDependentResultTaskInstanceContextList);
+            return 
mybatisMapper.updateTaskInstanceContextByTaskInstanceIdAndContextType(
+                    taskInstanceContext.getTaskInstanceId(),
+                    taskInstanceContext.getContextType(), 
JSONUtils.toJsonString(taskInstanceContext.getContext()));
+        }
+    }
+
+    @Override
+    public List<TaskInstanceContext> 
batchQueryByTaskInstanceIdsAndContextType(List<Integer> taskInstanceIds,
+                                                                               
ContextType contextType) {
+        if (CollectionUtils.isEmpty(taskInstanceIds)) {
+            return Collections.emptyList();
+        }
+        return 
mybatisMapper.batchQueryByTaskInstanceIdsAndContextType(taskInstanceIds, 
contextType);
+    }
+}
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceContextMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceContextMapper.xml
new file mode 100644
index 0000000000..04f7e2080c
--- /dev/null
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceContextMapper.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"; >
+<mapper 
namespace="org.apache.dolphinscheduler.dao.mapper.TaskInstanceContextMapper">
+    <select id="queryListByTaskInstanceIdAndContextType" 
resultType="org.apache.dolphinscheduler.dao.entity.TaskInstanceContext">
+        SELECT
+            id
+            ,task_instance_id
+            ,context
+            ,context_type
+            ,create_time
+            ,update_time
+        FROM
+        t_ds_task_instance_context
+        WHERE 1=1
+        AND task_instance_id = #{taskInstanceId}
+        AND context_type = #{contextType}
+    </select>
+
+    <delete id="deleteByTaskInstanceIdAndContextType">
+        DELETE FROM t_ds_task_instance_context
+        WHERE task_instance_id = #{taskInstanceId}
+        AND context_type = #{contextType}
+    </delete>
+
+    <update id="updateByTaskInstanceId">
+        UPDATE t_ds_task_instance_context
+        SET
+            context = #{context}
+            ,update_time = now()
+        WHERE 1=1
+        AND task_instance_id = #{taskInstanceId}
+        AND context_type = #{contextType}
+    </update>
+
+    <select id="batchQueryByTaskInstanceIdsAndContextType" 
resultType="org.apache.dolphinscheduler.dao.entity.TaskInstanceContext">
+        SELECT
+            id
+            ,task_instance_id
+            ,context
+            ,context_type
+            ,create_time
+            ,update_time
+        FROM
+        t_ds_task_instance_context
+        WHERE 1=1
+        AND task_instance_id in
+        <foreach collection="taskInstanceIds" item="taskInstanceId" open="(" 
separator="," close=")">
+            #{taskInstanceId}
+        </foreach>
+        AND context_type = #{contextType}
+    </select>
+</mapper>
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
index 8c4510659a..ce18e03fb1 100644
--- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
+++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql
@@ -925,6 +925,20 @@ CREATE TABLE t_ds_task_instance
 -- Records of t_ds_task_instance
 -- ----------------------------
 
+-- ----------------------------
+-- Table structure for t_ds_task_instance_context
+-- ----------------------------
+DROP TABLE IF EXISTS `t_ds_task_instance_context`;
+CREATE TABLE `t_ds_task_instance_context` (
+    `id` int(11) NOT NULL AUTO_INCREMENT,
+    `task_instance_id` int(11) NOT NULL,
+    `context` text NOT NULL,
+    `context_type` varchar(200) NOT NULL,
+    `create_time` datetime NOT NULL,
+    `update_time` datetime NOT NULL,
+    PRIMARY KEY (`id`)
+);
+
 -- ----------------------------
 -- Table structure for t_ds_tenant
 -- ----------------------------
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
index d3774fee19..3091d7f337 100644
--- a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
+++ b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql
@@ -925,6 +925,21 @@ CREATE TABLE `t_ds_task_instance` (
 -- Records of t_ds_task_instance
 -- ----------------------------
 
+-- ----------------------------
+-- Table structure for t_ds_task_instance_context
+-- ----------------------------
+DROP TABLE IF EXISTS `t_ds_task_instance_context`;
+CREATE TABLE `t_ds_task_instance_context` (
+    `id` int(11) NOT NULL AUTO_INCREMENT,
+    `task_instance_id` int(11) NOT NULL,
+    `context` text NOT NULL,
+    `context_type` varchar(200) NOT NULL COMMENT 'context type',
+    `create_time` datetime NOT NULL,
+    `update_time` datetime NOT NULL,
+    PRIMARY KEY (`id`),
+    UNIQUE KEY `task_instance_id` (`task_instance_id`,`context_type`) USING 
BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE = utf8_bin;
+
 -- ----------------------------
 -- Table structure for t_ds_tenant
 -- ----------------------------
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
index c84db98fa2..1d65eb93bf 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql
@@ -835,6 +835,22 @@ CREATE TABLE t_ds_task_instance (
 
 create index idx_task_instance_code_version on t_ds_task_instance (task_code, 
task_definition_version);
 
+--
+-- Table structure for t_ds_task_instance_context
+--
+DROP TABLE IF EXISTS t_ds_task_instance_context;
+CREATE TABLE t_ds_task_instance_context (
+  id int NOT NULL,
+  task_instance_id int NOT NULL,
+  context text NOT NULL,
+  context_type varchar(200) NOT NULL,
+  create_time timestamp NOT NULL,
+  update_time timestamp NOT NULL,
+  PRIMARY KEY (id)
+);
+
+create unique index idx_task_instance_id on t_ds_task_instance_context 
(task_instance_id, context_type);
+
 --
 -- Table structure for table t_ds_tenant
 --
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
index 79b6fe34d7..dd7c9f8919 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/mysql/dolphinscheduler_ddl.sql
@@ -361,3 +361,15 @@ d//
 delimiter ;
 CALL drop_column_t_ds_task_instance_cache_key;
 DROP PROCEDURE drop_column_t_ds_task_instance_cache_key;
+
+DROP TABLE IF EXISTS `t_ds_task_instance_context`;
+CREATE TABLE `t_ds_task_instance_context` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `task_instance_id` int(11) NOT NULL,
+  `context` text NOT NULL,
+  `context_type` varchar(255) NOT NULL COMMENT 'context type',
+  `create_time` datetime NOT NULL,
+  `update_time` datetime NOT NULL,
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `task_instance_id` (`task_instance_id`,`context_type`) USING BTREE
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE = utf8_bin;
diff --git 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
index f300861113..22188d2fd7 100644
--- 
a/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
+++ 
b/dolphinscheduler-dao/src/main/resources/sql/upgrade/3.3.0_schema/postgresql/dolphinscheduler_ddl.sql
@@ -362,3 +362,15 @@ d//
 select drop_column_t_ds_task_instance_cache_key();
 DROP FUNCTION IF EXISTS drop_column_t_ds_task_instance_cache_key();
 
+DROP TABLE IF EXISTS t_ds_task_instance_context;
+CREATE TABLE t_ds_task_instance_context (
+    id int NOT NULL,
+    task_instance_id int NOT NULL,
+    context text NOT NULL,
+    context_type varchar(200) NOT NULL,
+    create_time timestamp NOT NULL,
+    update_time timestamp NOT NULL,
+    PRIMARY KEY (id)
+);
+
+create unique index idx_task_instance_id on t_ds_task_instance_context 
(task_instance_id, context_type);
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/condition/ConditionLogicTask.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/condition/ConditionLogicTask.java
index dcfca074e4..7ebb6eb1d9 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/condition/ConditionLogicTask.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/condition/ConditionLogicTask.java
@@ -22,7 +22,7 @@ import org.apache.dolphinscheduler.dao.entity.TaskInstance;
 import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
 import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext;
 import org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
-import org.apache.dolphinscheduler.plugin.task.api.model.DependentItem;
+import 
org.apache.dolphinscheduler.plugin.task.api.model.ConditionDependentItem;
 import 
org.apache.dolphinscheduler.plugin.task.api.parameters.ConditionsParameters;
 import org.apache.dolphinscheduler.plugin.task.api.utils.DependentUtils;
 import 
org.apache.dolphinscheduler.server.master.engine.executor.plugin.AbstractLogicTask;
@@ -85,13 +85,14 @@ public class ConditionLogicTask extends 
AbstractLogicTask<ConditionsParameters>
                         dependentTaskModel.getRelation(),
                         dependentTaskModel.getDependItemList()
                                 .stream()
-                                .map(dependentItem -> 
getDependResultForItem(dependentItem, taskInstanceMap))
+                                .map(dependentItem -> 
getDependResultForItem((ConditionDependentItem) dependentItem,
+                                        taskInstanceMap))
                                 .collect(Collectors.toList())))
                 .collect(Collectors.toList());
         return 
DependentUtils.getDependResultForRelation(dependence.getRelation(), 
dependResults);
     }
 
-    private DependResult getDependResultForItem(DependentItem item, Map<Long, 
TaskInstance> taskInstanceMap) {
+    private DependResult getDependResultForItem(ConditionDependentItem item, 
Map<Long, TaskInstance> taskInstanceMap) {
         TaskInstance taskInstance = taskInstanceMap.get(item.getDepTaskCode());
         if (taskInstance == null) {
             log.info("The depend item: {} has not completed yet", 
DependResult.FAILED);
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTask.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTask.java
index 3e4d7314f0..d007a8255c 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTask.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTask.java
@@ -20,6 +20,7 @@ package 
org.apache.dolphinscheduler.server.master.engine.executor.plugin.depende
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
 import org.apache.dolphinscheduler.dao.repository.ProjectDao;
 import org.apache.dolphinscheduler.dao.repository.TaskDefinitionDao;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceContextDao;
 import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowDefinitionDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceDao;
@@ -48,7 +49,8 @@ public class DependentLogicTask extends 
AbstractLogicTask<DependentParameters> {
                               TaskDefinitionDao taskDefinitionDao,
                               TaskInstanceDao taskInstanceDao,
                               WorkflowInstanceDao workflowInstanceDao,
-                              IWorkflowExecutionRunnable 
workflowExecutionRunnable) {
+                              IWorkflowExecutionRunnable 
workflowExecutionRunnable,
+                              TaskInstanceContextDao taskInstanceContextDao) {
         super(taskExecutionContext);
         this.taskExecutionContext = taskExecutionContext;
         this.dependentTaskTracker = new DependentTaskTracker(
@@ -58,7 +60,8 @@ public class DependentLogicTask extends 
AbstractLogicTask<DependentParameters> {
                 workflowDefinitionDao,
                 taskDefinitionDao,
                 taskInstanceDao,
-                workflowInstanceDao);
+                workflowInstanceDao,
+                taskInstanceContextDao);
         onTaskRunning();
     }
 
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTaskPluginFactory.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTaskPluginFactory.java
index 6c4f35b1fb..0e8a7dcaae 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTaskPluginFactory.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentLogicTaskPluginFactory.java
@@ -19,6 +19,7 @@ package 
org.apache.dolphinscheduler.server.master.engine.executor.plugin.depende
 
 import org.apache.dolphinscheduler.dao.repository.ProjectDao;
 import org.apache.dolphinscheduler.dao.repository.TaskDefinitionDao;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceContextDao;
 import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowDefinitionDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceDao;
@@ -41,12 +42,19 @@ public class DependentLogicTaskPluginFactory implements 
ILogicTaskPluginFactory<
 
     @Autowired
     private ProjectDao projectDao;
+
     @Autowired
     private WorkflowDefinitionDao workflowDefinitionDao;
+
     @Autowired
     private TaskDefinitionDao taskDefinitionDao;
+
     @Autowired
     private TaskInstanceDao taskInstanceDao;
+
+    @Autowired
+    private TaskInstanceContextDao taskInstanceContextDao;
+
     @Autowired
     private WorkflowInstanceDao workflowInstanceDao;
 
@@ -68,7 +76,8 @@ public class DependentLogicTaskPluginFactory implements 
ILogicTaskPluginFactory<
                 taskDefinitionDao,
                 taskInstanceDao,
                 workflowInstanceDao,
-                workflowExecutionRunnable);
+                workflowExecutionRunnable,
+                taskInstanceContextDao);
     }
 
     @Override
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentTaskTracker.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentTaskTracker.java
index f2cae5828e..c9572a99ad 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentTaskTracker.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/executor/plugin/dependent/DependentTaskTracker.java
@@ -17,17 +17,19 @@
 
 package 
org.apache.dolphinscheduler.server.master.engine.executor.plugin.dependent;
 
-import static 
org.apache.dolphinscheduler.common.constants.Constants.DEPENDENT_SPLIT;
-
 import org.apache.dolphinscheduler.common.constants.Constants;
+import org.apache.dolphinscheduler.common.enums.ContextType;
 import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import 
org.apache.dolphinscheduler.dao.entity.DependentResultTaskInstanceContext;
 import org.apache.dolphinscheduler.dao.entity.Project;
 import org.apache.dolphinscheduler.dao.entity.TaskDefinition;
 import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.dao.entity.TaskInstanceContext;
 import org.apache.dolphinscheduler.dao.entity.WorkflowDefinition;
 import org.apache.dolphinscheduler.dao.entity.WorkflowInstance;
 import org.apache.dolphinscheduler.dao.repository.ProjectDao;
 import org.apache.dolphinscheduler.dao.repository.TaskDefinitionDao;
+import org.apache.dolphinscheduler.dao.repository.TaskInstanceContextDao;
 import org.apache.dolphinscheduler.dao.repository.TaskInstanceDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowDefinitionDao;
 import org.apache.dolphinscheduler.dao.repository.WorkflowInstanceDao;
@@ -54,6 +56,8 @@ import java.util.stream.Collectors;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 
+import com.google.common.collect.Lists;
+
 @Slf4j
 public class DependentTaskTracker {
 
@@ -63,6 +67,7 @@ public class DependentTaskTracker {
     private final WorkflowDefinitionDao workflowDefinitionDao;
     private final TaskDefinitionDao taskDefinitionDao;
     private final TaskInstanceDao taskInstanceDao;
+    private final TaskInstanceContextDao taskInstanceContextDao;
 
     private final WorkflowInstance workflowInstance;
     private final Date dependentDate;
@@ -70,33 +75,41 @@ public class DependentTaskTracker {
     private final Map<String, DependResult> dependResultMap;
     private final Map<String, Property> dependVarPoolPropertyMap;
 
+    private Map<Long, WorkflowDefinition> processDefinitionMap;
+    private Map<Long, TaskDefinition> taskDefinitionMap;
+    private Map<Long, Project> projectCodeMap;
+    private TaskInstanceContext taskInstanceContext;
+
     public DependentTaskTracker(TaskExecutionContext taskExecutionContext,
                                 DependentParameters dependentParameters,
                                 ProjectDao projectDao,
                                 WorkflowDefinitionDao workflowDefinitionDao,
                                 TaskDefinitionDao taskDefinitionDao,
                                 TaskInstanceDao taskInstanceDao,
-                                WorkflowInstanceDao workflowInstanceDao) {
+                                WorkflowInstanceDao workflowInstanceDao,
+                                TaskInstanceContextDao taskInstanceContextDao) 
{
         this.taskExecutionContext = taskExecutionContext;
         this.dependentParameters = dependentParameters;
         this.projectDao = projectDao;
         this.workflowDefinitionDao = workflowDefinitionDao;
         this.taskDefinitionDao = taskDefinitionDao;
         this.taskInstanceDao = taskInstanceDao;
+        this.taskInstanceContextDao = taskInstanceContextDao;
         this.workflowInstance =
                 
workflowInstanceDao.queryById(taskExecutionContext.getWorkflowInstanceId());
         this.dependentDate = calculateDependentDate();
         this.dependentTaskList = initializeDependentTaskList();
-        log.info("Initialized dependent task list successfully");
         this.dependResultMap = new HashMap<>();
         this.dependVarPoolPropertyMap = new HashMap<>();
+        this.taskInstanceContext = new TaskInstanceContext();
+        initTaskDependentResult();
     }
 
     public @NonNull TaskExecutionStatus getDependentTaskStatus() {
         if (isAllDependentTaskFinished()) {
             log.info("All dependent task finished, will calculate the 
dependent result");
             DependResult dependResult = calculateDependResult();
-            log.info("The Dependent result is: {}", dependResult);
+            log.info("The final Dependent result is: {}", dependResult);
             if (dependResult == DependResult.SUCCESS) {
                 
dependentParameters.setVarPool(JSONUtils.toJsonString(dependVarPoolPropertyMap.values()));
                 log.info("Set dependentParameters varPool: {}", 
dependentParameters.getVarPool());
@@ -131,12 +144,12 @@ public class DependentTaskTracker {
             }
         }
 
-        final Map<Long, Project> projectCodeMap = projectDao.queryByCodes(new 
ArrayList<>(projectCodes)).stream()
+        projectCodeMap = projectDao.queryByCodes(new 
ArrayList<>(projectCodes)).stream()
                 .collect(Collectors.toMap(Project::getCode, 
Function.identity()));
-        final Map<Long, WorkflowDefinition> processDefinitionMap =
+        processDefinitionMap =
                 
workflowDefinitionDao.queryByCodes(processDefinitionCodes).stream()
                         .collect(Collectors.toMap(WorkflowDefinition::getCode, 
Function.identity()));
-        final Map<Long, TaskDefinition> taskDefinitionMap = 
taskDefinitionDao.queryByCodes(taskDefinitionCodes).stream()
+        taskDefinitionMap = 
taskDefinitionDao.queryByCodes(taskDefinitionCodes).stream()
                 .collect(Collectors.toMap(TaskDefinition::getCode, 
Function.identity()));
         final TaskInstance taskInstance =
                 
taskInstanceDao.queryById(taskExecutionContext.getTaskInstanceId());
@@ -158,18 +171,17 @@ public class DependentTaskTracker {
                                     "The dependent task's workflow is not 
exist, dependentItem: " + dependentItem);
                         }
                         if (dependentItem.getDepTaskCode() == 
Constants.DEPENDENT_ALL_TASK_CODE) {
-                            log.info("Add dependent task:");
-                            log.info("DependentRelation: {}", 
dependentTaskModel.getRelation());
-                            log.info("ProjectName: {}", project.getName());
-                            log.info("WorkflowName: {}", 
workflowDefinition.getName());
-                            log.info("TaskName: {}", "ALL");
-                            log.info("DependentKey: {}", 
dependentItem.getKey());
+                            log.info(
+                                    "Add dependent all task, ProjectName: {}, 
WorkflowName: {}, WorkflowCode: {}, DependentCycle: {}, DependentCycleDate: {}, 
DependentRelation: {}",
+                                    project.getName(), 
workflowDefinition.getName(), workflowDefinition.getCode(),
+                                    dependentItem.getCycle(), 
dependentItem.getDateValue(),
+                                    dependentTaskModel.getRelation());
                         } else if (dependentItem.getDepTaskCode() == 
Constants.DEPENDENT_WORKFLOW_CODE) {
-                            log.info("Add dependent task:");
-                            log.info("DependentRelation: {}", 
dependentTaskModel.getRelation());
-                            log.info("ProjectName: {}", project.getName());
-                            log.info("WorkflowName: {}", 
workflowDefinition.getName());
-                            log.info("DependentKey: {}", 
dependentItem.getKey());
+                            log.info(
+                                    "Add dependent workflow task, ProjectName: 
{}, WorkflowName: {}, WorkflowCode: {}, DependentCycle: {}, DependentCycleDate: 
{}, DependentRelation: {}",
+                                    project.getName(), 
workflowDefinition.getName(), workflowDefinition.getCode(),
+                                    dependentItem.getCycle(), 
dependentItem.getDateValue(),
+                                    dependentTaskModel.getRelation());
                         } else {
                             TaskDefinition taskDefinition = 
taskDefinitionMap.get(dependentItem.getDepTaskCode());
                             if (taskDefinition == null) {
@@ -179,21 +191,29 @@ public class DependentTaskTracker {
                                         "The dependent task's taskDefinition 
is not exist, dependentItem: "
                                                 + dependentItem);
                             }
-                            log.info("Add dependent task:");
-                            log.info("DependentRelation: {}", 
dependentTaskModel.getRelation());
-                            log.info("ProjectName: {}", project.getName());
-                            log.info("WorkflowName: {}", 
workflowDefinition.getName());
-                            log.info("TaskName: {}", taskDefinition.getName());
-                            log.info("DependentKey: {}", 
dependentItem.getKey());
+                            log.info(
+                                    "Add dependent task, ProjectName: {}, 
WorkflowName: {}, WorkflowCode: {}, TaskName: {}, DependentCycle: {}, 
DependentCycleDate: {}, DependentRelation: {}",
+                                    project.getName(), 
workflowDefinition.getName(), workflowDefinition.getCode(),
+                                    taskDefinition.getName(), 
dependentItem.getCycle(), dependentItem.getDateValue(),
+                                    dependentTaskModel.getRelation());
                         }
                     }
                     return new 
DependentExecute(dependentTaskModel.getDependItemList(),
                             dependentTaskModel.getRelation(), 
workflowInstance, taskInstance);
                 }).collect(Collectors.toList());
-        log.info("Initialized dependent task list");
+        log.info("Initialized dependent task list successfully");
         return dependentExecutes;
     }
 
+    private void initTaskDependentResult() {
+        
taskInstanceContextDao.deleteByTaskInstanceIdAndContextType(taskExecutionContext.getTaskInstanceId(),
+                ContextType.DEPENDENT_RESULT_CONTEXT);
+        
taskInstanceContext.setTaskInstanceId(taskExecutionContext.getTaskInstanceId());
+        
taskInstanceContext.setContextType(ContextType.DEPENDENT_RESULT_CONTEXT);
+        taskInstanceContext.setCreateTime(new Date());
+        taskInstanceContext.setUpdateTime(new Date());
+    }
+
     private DependResult calculateDependResult() {
         List<DependResult> dependResultList = new ArrayList<>();
         Map<String, Long> dependVarPoolEndTimeMap = new HashMap<>();
@@ -223,12 +243,48 @@ public class DependentTaskTracker {
             dependentExecute.getDependResultMap().forEach((dependentKey, 
dependResult) -> {
                 if (!dependResultMap.containsKey(dependentKey)) {
                     dependResultMap.put(dependentKey, dependResult);
-                    // The log is applied in: api-server obtains the result of 
the item dependent in the dependent task
-                    // node.{@link 
ProcessInstanceServiceImpl#parseLogForDependentResult}
-                    log.info("Dependent item check finished, {} dependentKey: 
{}, result: {}, dependentDate: {}",
-                            DEPENDENT_SPLIT,
-                            dependentKey,
-                            dependResult, dependentDate);
+                    DependentItem dependentItem = new 
DependentItem().fromKey(dependentKey);
+                    WorkflowDefinition workflowDefinition = 
processDefinitionMap.get(dependentItem.getDefinitionCode());
+                    Project project = 
projectCodeMap.get(workflowDefinition.getProjectCode());
+                    DependentResultTaskInstanceContext 
dependentResultTaskInstanceContext =
+                            new DependentResultTaskInstanceContext();
+                    
dependentResultTaskInstanceContext.setProjectCode(project.getCode());
+                    
dependentResultTaskInstanceContext.setWorkflowDefinitionCode(workflowDefinition.getCode());
+                    
dependentResultTaskInstanceContext.setDependentResult(dependResult);
+                    
dependentResultTaskInstanceContext.setContextType(ContextType.DEPENDENT_RESULT_CONTEXT);
+                    if (dependentItem.getDepTaskCode() == 
Constants.DEPENDENT_ALL_TASK_CODE) {
+                        
dependentResultTaskInstanceContext.setTaskDefinitionCode(Constants.DEPENDENT_ALL_TASK_CODE);
+                        
dependentResultTaskInstanceContext.setDateCycle(dependentItem.getDateValue());
+                        taskInstanceContext
+                                
.setTaskInstanceContext(Lists.newArrayList(dependentResultTaskInstanceContext));
+                        
taskInstanceContextDao.upsertTaskInstanceContext(taskInstanceContext);
+                        log.info(
+                                "Dependent type all task check finished, 
DependentResult: {}, DependentDate: {}, ProjectName: {}, WorkflowName: {}, 
WorkflowCode: {}, DependentCycle: {}, DependentCycleDate: {}",
+                                dependResult, dependentDate, 
project.getName(), workflowDefinition.getName(),
+                                workflowDefinition.getCode(), 
dependentItem.getCycle(), dependentItem.getDateValue());
+                    } else if (dependentItem.getDepTaskCode() == 
Constants.DEPENDENT_WORKFLOW_CODE) {
+                        
dependentResultTaskInstanceContext.setTaskDefinitionCode(Constants.DEPENDENT_WORKFLOW_CODE);
+                        
dependentResultTaskInstanceContext.setDateCycle(dependentItem.getDateValue());
+                        taskInstanceContext
+                                
.setTaskInstanceContext(Lists.newArrayList(dependentResultTaskInstanceContext));
+                        
taskInstanceContextDao.upsertTaskInstanceContext(taskInstanceContext);
+                        log.info(
+                                "Dependent type workflow task check finished, 
DependentResult: {}, DependentDate: {}, ProjectName: {}, WorkflowName: {}, 
WorkflowCode: {}, DependentCycle: {}, DependentCycleDate: {}",
+                                dependResult, dependentDate, 
project.getName(), workflowDefinition.getName(),
+                                workflowDefinition.getCode(), 
dependentItem.getCycle(), dependentItem.getDateValue());
+                    } else {
+                        TaskDefinition taskDefinition = 
taskDefinitionMap.get(dependentItem.getDepTaskCode());
+                        
dependentResultTaskInstanceContext.setTaskDefinitionCode(taskDefinition.getCode());
+                        
dependentResultTaskInstanceContext.setDateCycle(dependentItem.getDateValue());
+                        taskInstanceContext
+                                
.setTaskInstanceContext(Lists.newArrayList(dependentResultTaskInstanceContext));
+                        
taskInstanceContextDao.upsertTaskInstanceContext(taskInstanceContext);
+                        log.info(
+                                "Dependent type task check finished, 
DependentResult: {}, DependentDate: {}, ProjectName: {}, WorkflowName: {}, 
WorkflowCode: {}, TaskName: {}, TaskCode: {}, DependentCycle: {}, 
DependentCycleDate: {}",
+                                dependResult, dependentDate, 
project.getName(), workflowDefinition.getName(),
+                                workflowDefinition.getCode(), 
taskDefinition.getName(), taskDefinition.getCode(),
+                                dependentItem.getCycle(), 
dependentItem.getDateValue());
+                    }
                 }
             });
         }
diff --git 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
index 2fb46dc04d..300a989b42 100644
--- 
a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
+++ 
b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/utils/DependentExecute.java
@@ -55,6 +55,7 @@ import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
 /**
@@ -84,6 +85,7 @@ public class DependentExecute {
     /**
      * depend result map
      */
+    @Getter
     private Map<String, DependResult> dependResultMap = new HashMap<>();
 
     /**
@@ -102,8 +104,10 @@ public class DependentExecute {
      */
     private final TaskDefinitionDao taskDefinitionDao = 
SpringApplicationContext.getBean(TaskDefinitionDao.class);
 
+    @Getter
     private Map<String, Property> dependTaskVarPoolPropertyMap = new 
HashMap<>();
 
+    @Getter
     private Map<String, Long> dependTaskVarPoolEndTimeMap = new HashMap<>();
 
     private Map<String, Property> dependItemVarPoolPropertyMap = new 
HashMap<>();
@@ -410,7 +414,7 @@ public class DependentExecute {
                 continue;
             }
             DependResult dependResult = getDependResultForItem(dependentItem, 
currentTime, testFlag);
-            if (dependResult != DependResult.WAITING && dependResult != 
DependResult.FAILED) {
+            if (dependResult != DependResult.WAITING) {
                 dependResultMap.put(dependentItem.getKey(), dependResult);
                 if (dependentItem.getParameterPassing() && 
!dependItemVarPoolPropertyMap.isEmpty()) {
                     
DependentUtils.addTaskVarPool(dependItemVarPoolPropertyMap, 
dependItemVarPoolEndTimeMap,
@@ -439,18 +443,6 @@ public class DependentExecute {
         return getDependentResultForItem(item, currentTime, testFlag);
     }
 
-    public Map<String, DependResult> getDependResultMap() {
-        return dependResultMap;
-    }
-
-    public Map<String, Property> getDependTaskVarPoolPropertyMap() {
-        return dependTaskVarPoolPropertyMap;
-    }
-
-    public Map<String, Long> getDependTaskVarPoolEndTimeMap() {
-        return dependTaskVarPoolEndTimeMap;
-    }
-
     /**
      * check for self-dependent
      * @param dependentItem
diff --git 
a/dolphinscheduler-standalone-server/src/main/resources/logback-spring.xml 
b/dolphinscheduler-standalone-server/src/main/resources/logback-spring.xml
index 0ad9c6d0ca..2d74923c30 100644
--- a/dolphinscheduler-standalone-server/src/main/resources/logback-spring.xml
+++ b/dolphinscheduler-standalone-server/src/main/resources/logback-spring.xml
@@ -35,6 +35,8 @@
             
<fileNamePattern>${log.base}/dolphinscheduler-standalone.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
             <maxHistory>168</maxHistory>
             <maxFileSize>200MB</maxFileSize>
+            <totalSizeCap>50GB</totalSizeCap>
+            <cleanHistoryOnStart>true</cleanHistoryOnStart>
         </rollingPolicy>
         <encoder>
             <pattern>
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
index 539f2e5712..f5fca20a34 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
@@ -17,9 +17,6 @@
 
 package org.apache.dolphinscheduler.plugin.task.api.enums;
 
-/**
- * depend result
- */
 public enum DependResult {
 
     /**
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
index 2a60a5e8f3..3060f3d093 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
@@ -17,9 +17,6 @@
 
 package org.apache.dolphinscheduler.plugin.task.api.enums;
 
-/**
- * dependent relation: and or
- */
 public enum DependentRelation {
 
     AND, OR;
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentType.java
similarity index 91%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
copy to 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentType.java
index 2a60a5e8f3..ba1b5488e4 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentRelation.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependentType.java
@@ -17,10 +17,6 @@
 
 package org.apache.dolphinscheduler.plugin.task.api.enums;
 
-/**
- * dependent relation: and or
- */
-public enum DependentRelation {
-
-    AND, OR;
+public enum DependentType {
+    DEPENDENT_ON_WORKFLOW, DEPENDENT_ON_TASK
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/ConditionDependentItem.java
similarity index 70%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/ConditionDependentItem.java
index 539f2e5712..dd4b216e73 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/ConditionDependentItem.java
@@ -15,18 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.plugin.task.api.model;
 
-/**
- * depend result
- */
-public enum DependResult {
+import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ConditionDependentItem extends DependentItem {
 
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
+    private TaskExecutionStatus status;
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/ConditionDependentTaskModel.java
similarity index 71%
copy from 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
copy to 
dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/ConditionDependentTaskModel.java
index 539f2e5712..71949e3d6b 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/enums/DependResult.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/ConditionDependentTaskModel.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.dolphinscheduler.plugin.task.api.enums;
+package org.apache.dolphinscheduler.plugin.task.api.model;
 
-/**
- * depend result
- */
-public enum DependResult {
+import org.apache.dolphinscheduler.plugin.task.api.enums.DependentRelation;
+
+import java.util.List;
+
+import lombok.Data;
+
+@Data
+public class ConditionDependentTaskModel {
+
+    private List<ConditionDependentItem> dependItemList;
+    private DependentRelation relation;
 
-    /**
-     * 0 success
-     * 1 waiting
-     * 2 failed
-     * 3 non execution
-     */
-    SUCCESS, WAITING, FAILED, NON_EXEC
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/DependentItem.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/DependentItem.java
index 47f42c416c..785ae2b354 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/DependentItem.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/model/DependentItem.java
@@ -18,23 +18,20 @@
 package org.apache.dolphinscheduler.plugin.task.api.model;
 
 import org.apache.dolphinscheduler.plugin.task.api.enums.DependResult;
-import org.apache.dolphinscheduler.plugin.task.api.enums.TaskExecutionStatus;
+import org.apache.dolphinscheduler.plugin.task.api.enums.DependentType;
 
 import lombok.Data;
 
-/**
- * dependent item
- */
 @Data
 public class DependentItem {
 
+    private DependentType dependentType;
     private long projectCode;
     private long definitionCode;
     private long depTaskCode;
     private String cycle;
     private String dateValue;
     private DependResult dependResult;
-    private TaskExecutionStatus status;
     private Boolean parameterPassing = false;
 
     public String getKey() {
@@ -45,4 +42,16 @@ public class DependentItem {
                 getDateValue());
     }
 
+    public DependentItem fromKey(String key) {
+        String[] parts = key.split("-");
+        if (parts.length != 4) {
+            throw new IllegalArgumentException("Invalid key format");
+        }
+        setDefinitionCode(Long.parseLong(parts[0]));
+        setDepTaskCode(Long.parseLong(parts[1]));
+        setCycle(parts[2]);
+        setDateValue(parts[3]);
+        return this;
+    }
+
 }
diff --git 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/ConditionsParameters.java
 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/ConditionsParameters.java
index 8ad567578c..b076eb8852 100644
--- 
a/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/ConditionsParameters.java
+++ 
b/dolphinscheduler-task-plugin/dolphinscheduler-task-api/src/main/java/org/apache/dolphinscheduler/plugin/task/api/parameters/ConditionsParameters.java
@@ -18,7 +18,7 @@
 package org.apache.dolphinscheduler.plugin.task.api.parameters;
 
 import org.apache.dolphinscheduler.plugin.task.api.enums.DependentRelation;
-import org.apache.dolphinscheduler.plugin.task.api.model.DependentTaskModel;
+import 
org.apache.dolphinscheduler.plugin.task.api.model.ConditionDependentTaskModel;
 
 import org.apache.commons.collections4.CollectionUtils;
 
@@ -27,8 +27,10 @@ import java.util.List;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Builder
 @NoArgsConstructor
@@ -57,7 +59,7 @@ public class ConditionsParameters extends AbstractParameters {
     @AllArgsConstructor
     public static class ConditionDependency {
 
-        private List<DependentTaskModel> dependTaskList;
+        private List<ConditionDependentTaskModel> dependTaskList;
 
         private DependentRelation relation;
     }
diff --git 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
index 8fd407f6fb..66ac3fbdbf 100644
--- 
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
+++ 
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-dependent.ts
@@ -81,14 +81,6 @@ export function useDependent(model: { [field: string]: any 
}): IJsonItem[] {
   ]
 
   const CYCLE_LIST = [
-    {
-      value: 'month',
-      label: t('project.node.month')
-    },
-    {
-      value: 'week',
-      label: t('project.node.week')
-    },
     {
       value: 'day',
       label: t('project.node.day')
@@ -96,6 +88,14 @@ export function useDependent(model: { [field: string]: any 
}): IJsonItem[] {
     {
       value: 'hour',
       label: t('project.node.hour')
+    },
+    {
+      value: 'week',
+      label: t('project.node.week')
+    },
+    {
+      value: 'month',
+      label: t('project.node.month')
     }
   ]
   const DATE_LIST = {
@@ -251,16 +251,23 @@ export function useDependent(model: { [field: string]: 
any }): IJsonItem[] {
   const renderState = (item: {
     definitionCode: number
     depTaskCode: number
-    cycle: string
+    projectCode: number
     dateValue: string
   }) => {
     if (!item || router.currentRoute.value.name !== 'workflow-instance-detail')
       return null
-    const key = 
`${item.definitionCode}-${item.depTaskCode}-${item.cycle}-${item.dateValue}`
+    const key = 
`${item.projectCode}-${item.definitionCode}-${item.depTaskCode}-${item.dateValue}`
     const state: ITaskState = dependentResult[key]
-    return h(NIcon, { size: 24, color: TasksStateConfig[state]?.color }, () =>
-      h(TasksStateConfig[state]?.icon)
-    )
+    let icon: any
+    let color: string
+    if (state) {
+      icon = TasksStateConfig[state]?.icon
+      color = TasksStateConfig[state]?.color
+    } else {
+      icon = TasksStateConfig.RUNNING_EXECUTION.icon
+      color = TasksStateConfig.RUNNING_EXECUTION.color
+    }
+    return h(NIcon, { size: 24, color: color }, () => h(icon))
   }
 
   onMounted(() => {
@@ -449,6 +456,7 @@ export function useDependent(model: { [field: string]: any 
}): IJsonItem[] {
               }
             },
             options: CYCLE_LIST,
+            value: CYCLE_LIST.length > 0 ? CYCLE_LIST[0].value : '',
             path: `dependTaskList.${i}.dependItemList.${j}.cycle`,
             rule: {
               required: true,
@@ -466,7 +474,9 @@ export function useDependent(model: { [field: string]: any 
}): IJsonItem[] {
             span: 10,
             name: ' ',
             options:
-              selectOptions.value[i]?.dependItemList[j]?.dateOptions || [],
+              selectOptions.value[i]?.dependItemList[j]?.dateOptions ||
+              DATE_LIST.day,
+            value: DATE_LIST.day[0].value,
             path: `dependTaskList.${i}.dependItemList.${j}.dateValue`,
             rule: {
               trigger: ['input', 'blur'],
@@ -477,19 +487,19 @@ export function useDependent(model: { [field: string]: 
any }): IJsonItem[] {
               }
             }
           }),
-          (j = 0) => ({
-            type: 'switch',
-            field: 'parameterPassing',
-            span: 20,
-            name: t('project.node.dependent_task_parameter_passing'),
-            path: `dependTaskList.${i}.dependItemList.${j}.parameterPassing`
-          }),
           (j = 0) => ({
             type: 'custom',
             field: 'state',
             span: 2,
             name: ' ',
             widget: renderState(model.dependTaskList[i]?.dependItemList[j])
+          }),
+          (j = 0) => ({
+            type: 'switch',
+            field: 'parameterPassing',
+            span: 20,
+            name: t('project.node.dependent_task_parameter_passing'),
+            path: `dependTaskList.${i}.dependItemList.${j}.parameterPassing`
           })
         ]
       }),
diff --git 
a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/use-node-status.ts
 
b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/use-node-status.ts
index 0b2c68a0c5..f1075933e3 100644
--- 
a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/use-node-status.ts
+++ 
b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/use-node-status.ts
@@ -77,17 +77,16 @@ export function useNodeStatus(options: Options) {
       window.$message.success(t('project.workflow.refresh_status_succeeded'))
       taskList.value = res.taskList
       if (taskList.value) {
-        const allDependentResult = {}
+        const taskInstanceDependentResult: { [key: string]: any } = {}
         taskList.value.forEach((taskInstance: any) => {
           setNodeStatus(taskInstance.taskCode, taskInstance.state, 
taskInstance)
-          if (taskInstance.dependentResult) {
-            Object.assign(
-              allDependentResult,
-              JSON.parse(taskInstance.dependentResult)
-            )
+          if (taskInstance.taskInstanceDependentResult) {
+            const key = 
`${taskInstance.taskInstanceDependentResult.projectCode}-${taskInstance.taskInstanceDependentResult.workflowDefinitionCode}-${taskInstance.taskInstanceDependentResult.taskDefinitionCode}-${taskInstance.taskInstanceDependentResult.dateCycle}`
+            taskInstanceDependentResult[key] =
+              taskInstance.taskInstanceDependentResult.dependentResult
           }
         })
-        nodeStore.updateDependentResult(allDependentResult)
+        nodeStore.updateDependentResult(taskInstanceDependentResult)
       }
     })
   }


Reply via email to