public Map deleteTaskWorkflowRelation()

in dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowTaskRelationServiceImpl.java [282:351]


    public Map<String, Object> deleteTaskWorkflowRelation(User loginUser, long projectCode, long workflowDefinitionCode,
                                                          long taskCode) {
        Project project = projectMapper.queryByCode(projectCode);
        // check user access for project
        Map<String, Object> result = projectService.checkProjectAndAuth(loginUser, project, projectCode, null);
        if (result.get(Constants.STATUS) != Status.SUCCESS) {
            return result;
        }
        if (taskCode == 0) {
            log.error(
                    "delete task workflow relation error due to parameter taskCode is 0, projectCode:{}, workflowDefinitionCode:{}.",
                    projectCode, workflowDefinitionCode);
            putMsg(result, Status.DELETE_TASK_WORKFLOW_RELATION_ERROR);
            return result;
        }
        WorkflowDefinition workflowDefinition = workflowDefinitionMapper.queryByCode(workflowDefinitionCode);
        if (workflowDefinition == null) {
            log.error("workflow definition does not exist, workflowDefinitionCode:{}.", workflowDefinitionCode);
            putMsg(result, Status.WORKFLOW_DEFINITION_NOT_EXIST, String.valueOf(workflowDefinitionCode));
            return result;
        }
        TaskDefinition taskDefinition = taskDefinitionMapper.queryByCode(taskCode);
        if (null == taskDefinition) {
            log.error("Task definition does not exist, taskDefinitionCode:{}.", taskCode);
            putMsg(result, Status.TASK_DEFINE_NOT_EXIST, String.valueOf(taskCode));
            return result;
        }
        List<WorkflowTaskRelation> workflowTaskRelations =
                workflowTaskRelationMapper.queryByWorkflowDefinitionCode(workflowDefinitionCode);
        List<WorkflowTaskRelation> workflowTaskRelationList = Lists.newArrayList(workflowTaskRelations);
        if (CollectionUtils.isEmpty(workflowTaskRelationList)) {
            log.error("workflow task relations are empty, projectCode:{}, workflowDefinitionCode:{}.", projectCode,
                    workflowDefinitionCode);
            putMsg(result, Status.DATA_IS_NULL, "workflowTaskRelationList");
            return result;
        }
        List<Long> downstreamList = Lists.newArrayList();
        for (WorkflowTaskRelation workflowTaskRelation : workflowTaskRelations) {
            if (workflowTaskRelation.getPreTaskCode() == taskCode) {
                downstreamList.add(workflowTaskRelation.getPostTaskCode());
            }
            if (workflowTaskRelation.getPostTaskCode() == taskCode) {
                workflowTaskRelationList.remove(workflowTaskRelation);
            }
        }
        if (CollectionUtils.isNotEmpty(downstreamList)) {
            String downstream = StringUtils.join(downstreamList, ",");
            log.warn(
                    "Relation can not be deleted because task has downstream tasks:[{}], projectCode:{}, workflowDefinitionCode:{}, taskDefinitionCode:{}.",
                    downstream, projectCode, workflowDefinitionCode, taskCode);
            putMsg(result, Status.TASK_HAS_DOWNSTREAM, downstream);
            return result;
        }
        updateWorkflowDefiniteVersion(loginUser, result, workflowDefinition);
        updateRelation(loginUser, result, workflowDefinition, workflowTaskRelationList);
        if (TaskTypeUtils.isConditionTask(taskDefinition.getTaskType())
                || TaskTypeUtils.isSubWorkflowTask(taskDefinition.getTaskType())
                || TaskTypeUtils.isDependentTask(taskDefinition.getTaskType())) {
            int deleteTaskDefinition = taskDefinitionMapper.deleteByCode(taskCode);
            if (0 == deleteTaskDefinition) {
                log.error("Delete task definition error, taskDefinitionCode:{}.", taskCode);
                putMsg(result, Status.DELETE_TASK_DEFINE_BY_CODE_ERROR);
                throw new ServiceException(Status.DELETE_TASK_DEFINE_BY_CODE_ERROR);
            } else
                log.info("Delete {} type task definition complete, taskDefinitionCode:{}.",
                        taskDefinition.getTaskType(), taskCode);
        }
        putMsg(result, Status.SUCCESS);
        return result;
    }