Search in sources :

Example 1 with ScheduleTaskTaskShade

use of com.dtstack.taier.dao.domain.ScheduleTaskTaskShade in project Taier by DTStack.

the class DependencyManager method getDependencyHandler.

/**
 * 获得依赖处理器链
 *
 * @param keyPreStr        前缀
 * @param currentTaskShade 任务
 * @param corn             执行周期
 * @return 依赖处理器链
 */
public DependencyHandler getDependencyHandler(String keyPreStr, ScheduleTaskShade currentTaskShade, ScheduleCorn corn) {
    // 查询上游任务
    List<ScheduleTaskTaskShade> scheduleTaskTaskShadeList = scheduleTaskTaskService.lambdaQuery().eq(ScheduleTaskTaskShade::getTaskId, currentTaskShade.getTaskId()).eq(ScheduleTaskTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
    DependencyHandler dependencyHandler = null;
    List<Long> parentTaskIds = scheduleTaskTaskShadeList.stream().map(ScheduleTaskTaskShade::getParentTaskId).collect(Collectors.toList());
    // 如果没有上游任务,就不需要UpstreamDependencyHandler
    List<ScheduleTaskShade> taskShadeList = null;
    if (CollectionUtils.isNotEmpty(parentTaskIds)) {
        // 查询任务
        taskShadeList = scheduleTaskService.lambdaQuery().in(ScheduleTaskShade::getTaskId, parentTaskIds).eq(ScheduleTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
        if (CollectionUtils.isNotEmpty(taskShadeList)) {
            dependencyHandler = new UpstreamDependencyHandler(keyPreStr, currentTaskShade, taskShadeList, scheduleJobService);
        }
    }
    // 判断是否设置自依赖
    ScheduleConf scheduleConf = corn.getScheduleConf();
    if (DependencyType.SELF_DEPENDENCY_SUCCESS.getType().equals(scheduleConf.getSelfReliance()) || DependencyType.SELF_DEPENDENCY_END.getType().equals(scheduleConf.getSelfReliance())) {
        if (dependencyHandler == null) {
            dependencyHandler = new SelfRelianceDependencyHandler(keyPreStr, currentTaskShade, scheduleJobService);
        } else {
            dependencyHandler.setNext(new SelfRelianceDependencyHandler(keyPreStr, currentTaskShade, scheduleJobService));
        }
    } else if (DependencyType.PRE_PERIOD_CHILD_DEPENDENCY_SUCCESS.getType().equals(scheduleConf.getSelfReliance()) || DependencyType.PRE_PERIOD_CHILD_DEPENDENCY_END.getType().equals(scheduleConf.getSelfReliance())) {
        if (CollectionUtils.isNotEmpty(taskShadeList)) {
            if (dependencyHandler == null) {
                dependencyHandler = new UpstreamNextJobDependencyHandler(keyPreStr, currentTaskShade, taskShadeList, scheduleJobService);
            } else {
                dependencyHandler.setNext(new UpstreamNextJobDependencyHandler(keyPreStr, currentTaskShade, taskShadeList, scheduleJobService));
            }
        }
    }
    return dependencyHandler;
}
Also used : ScheduleConf(com.dtstack.taier.scheduler.server.builder.ScheduleConf) ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade)

Example 2 with ScheduleTaskTaskShade

use of com.dtstack.taier.dao.domain.ScheduleTaskTaskShade in project Taier by DTStack.

the class TaskTaskService method displayLevelNode.

/**
 * 展示固定层级的节点
 *
 * @param taskShade  头任务
 * @param level      层级
 * @param directType 方向
 * @return
 */
private List<TaskNodeVO> displayLevelNode(ScheduleTaskShade taskShade, Integer level, Integer directType) {
    List<TaskNodeVO> taskNodeVOS = Lists.newArrayList();
    if (level <= 0) {
        // 已经到达需要查询的节点层数,不需要继续向下查询,直接返回即可
        return taskNodeVOS;
    }
    List<ScheduleTaskTaskShade> taskTaskShades;
    List<Long> taskIdList;
    // 查询节点
    if (DisplayDirect.CHILD.getType().equals(directType)) {
        // 向下
        taskTaskShades = this.lambdaQuery().eq(ScheduleTaskTaskShade::getParentTaskId, taskShade.getTaskId()).eq(ScheduleTaskTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
        taskIdList = taskTaskShades.stream().map(ScheduleTaskTaskShade::getTaskId).collect(Collectors.toList());
    } else {
        // 向上
        taskTaskShades = this.lambdaQuery().eq(ScheduleTaskTaskShade::getTaskId, taskShade.getTaskId()).eq(ScheduleTaskTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
        taskIdList = taskTaskShades.stream().map(ScheduleTaskTaskShade::getParentTaskId).collect(Collectors.toList());
    }
    if (CollectionUtils.isEmpty(taskTaskShades)) {
        return taskNodeVOS;
    }
    // 查询任务
    List<ScheduleTaskShade> taskShadeList = taskService.lambdaQuery().in(ScheduleTaskShade::getTaskId, taskIdList).eq(ScheduleTaskShade::getFlowId, 0).eq(ScheduleTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).list();
    Map<Long, ScheduleTaskShade> taskShadeMap = taskShadeList.stream().collect(Collectors.toMap(ScheduleTaskShade::getTaskId, g -> (g)));
    for (ScheduleTaskTaskShade taskTaskShade : taskTaskShades) {
        ScheduleTaskShade taskShadeSon;
        if (DisplayDirect.CHILD.getType().equals(directType)) {
            taskShadeSon = taskShadeMap.get(taskTaskShade.getTaskId());
        } else {
            taskShadeSon = taskShadeMap.get(taskTaskShade.getParentTaskId());
        }
        TaskNodeVO vo = new TaskNodeVO();
        if (taskShadeSon != null) {
            setNode(taskShadeSon, vo);
            if (DisplayDirect.CHILD.getType().equals(directType)) {
                vo.setChildNode(displayLevelNode(taskShadeSon, level - 1, directType));
            } else {
                vo.setParentNode(displayLevelNode(taskShadeSon, level - 1, directType));
            }
        }
        taskNodeVOS.add(vo);
    }
    return taskNodeVOS;
}
Also used : ServiceImpl(com.baomidou.mybatisplus.extension.service.impl.ServiceImpl) QueryTaskDisplayDTO(com.dtstack.taier.scheduler.dto.schedule.QueryTaskDisplayDTO) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade) UserService(com.dtstack.taier.develop.service.user.UserService) ReturnTaskDisplayVO(com.dtstack.taier.develop.vo.schedule.ReturnTaskDisplayVO) TaskNodeVO(com.dtstack.taier.develop.vo.schedule.TaskNodeVO) EnvironmentContext(com.dtstack.taier.common.env.EnvironmentContext) TenantService(com.dtstack.taier.develop.service.console.TenantService) Autowired(org.springframework.beans.factory.annotation.Autowired) Set(java.util.Set) Collectors(java.util.stream.Collectors) ScheduleTaskTaskShadeMapper(com.dtstack.taier.dao.mapper.ScheduleTaskTaskShadeMapper) Sets(com.google.common.collect.Sets) DisplayDirect(com.dtstack.taier.common.enums.DisplayDirect) ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade) List(java.util.List) Tenant(com.dtstack.taier.dao.domain.Tenant) Lists(com.google.common.collect.Lists) CollectionUtils(org.apache.commons.collections.CollectionUtils) Service(org.springframework.stereotype.Service) Map(java.util.Map) JobUtils(com.dtstack.taier.develop.utils.JobUtils) EScheduleJobType(com.dtstack.taier.common.enums.EScheduleJobType) Deleted(com.dtstack.taier.common.enums.Deleted) TaskNodeVO(com.dtstack.taier.develop.vo.schedule.TaskNodeVO) ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade)

Example 3 with ScheduleTaskTaskShade

use of com.dtstack.taier.dao.domain.ScheduleTaskTaskShade in project Taier by DTStack.

the class TaskTaskService method findChildNode.

/**
 * 查询孩子节点
 *
 * @param root        顶节点
 * @param taskTaskMap 节点关系集合
 * @return 节点列表
 */
private List<TaskNodeVO> findChildNode(TaskNodeVO root, Map<Long, ScheduleTaskShade> taskMaps, Map<Long, List<ScheduleTaskTaskShade>> taskTaskMap) {
    List<ScheduleTaskTaskShade> scheduleTaskTaskShades = taskTaskMap.get(root.getTaskId());
    List<TaskNodeVO> taskNodeVOS = Lists.newArrayList();
    if (CollectionUtils.isEmpty(scheduleTaskTaskShades)) {
        return taskNodeVOS;
    }
    for (ScheduleTaskTaskShade taskTaskShade : scheduleTaskTaskShades) {
        ScheduleTaskShade taskShade = taskMaps.get(taskTaskShade.getTaskId());
        TaskNodeVO vo = new TaskNodeVO();
        vo.setTaskId(taskTaskShade.getTaskId());
        if (taskShade != null) {
            setNode(taskShade, vo);
        }
        vo.setChildNode(findChildNode(vo, taskMaps, taskTaskMap));
        taskNodeVOS.add(vo);
    }
    return taskNodeVOS;
}
Also used : ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade) TaskNodeVO(com.dtstack.taier.develop.vo.schedule.TaskNodeVO) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade)

Example 4 with ScheduleTaskTaskShade

use of com.dtstack.taier.dao.domain.ScheduleTaskTaskShade in project Taier by DTStack.

the class BatchFillDataTask method getRunList.

@Override
public Set<Long> getRunList() {
    Set<Long> runList = Sets.newHashSet();
    FillDataChooseTaskDTO rootTaskId = this.fillDataInfoBO.getRootTaskId();
    if (rootTaskId == null) {
        List<FillDataChooseTaskDTO> taskIds = this.fillDataInfoBO.getTaskChooseList();
        taskIds.forEach(task -> runList.add(task.getTaskId()));
    } else {
        List<Long> taskIds = Lists.newArrayList(rootTaskId.getTaskId());
        runList.addAll(taskIds);
        int level = 0;
        List<ScheduleTaskTaskShade> scheduleTaskTaskShades = getScheduleTaskTaskShades(taskIds);
        while (CollectionUtils.isNotEmpty(scheduleTaskTaskShades)) {
            List<Long> taskId = scheduleTaskTaskShades.stream().map(ScheduleTaskTaskShade::getTaskId).collect(Collectors.toList());
            runList.addAll(taskId);
            level++;
            if (level > environmentContext.getFillDataRootTaskMaxLevel()) {
                LOGGER.warn("rootTaskId:{} max:{} break cycle", rootTaskId.getTaskId(), level);
                break;
            }
            scheduleTaskTaskShades = getScheduleTaskTaskShades(taskId);
        }
    }
    return runList;
}
Also used : FillDataChooseTaskDTO(com.dtstack.taier.scheduler.dto.fill.FillDataChooseTaskDTO) ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade)

Example 5 with ScheduleTaskTaskShade

use of com.dtstack.taier.dao.domain.ScheduleTaskTaskShade in project Taier by DTStack.

the class TaskService method saveTask.

/**
 * 提交单个任务 (不包括工作流)
 * @param savaTaskDTO 任务
 * @return 是否提交成功
 */
public Boolean saveTask(SavaTaskDTO savaTaskDTO) {
    ScheduleTaskShadeDTO scheduleTaskShadeDTO = savaTaskDTO.getScheduleTaskShadeDTO();
    ScheduleTaskShade scheduleTaskShade = ScheduleTaskMapstructTransfer.INSTANCE.dtoToBean(scheduleTaskShadeDTO);
    ScheduleTaskShade dbTaskShade = this.lambdaQuery().eq(ScheduleTaskShade::getTaskId, scheduleTaskShade.getTaskId()).eq(ScheduleTaskShade::getIsDeleted, Deleted.NORMAL.getStatus()).one();
    ScheduleTaskShadeInfo scheduleTaskShadeInfo = new ScheduleTaskShadeInfo();
    scheduleTaskShadeInfo.setInfo(scheduleTaskShade.getExtraInfo());
    scheduleTaskShadeInfo.setTaskId(scheduleTaskShade.getTaskId());
    // 保存任务或者更新任务
    if (dbTaskShade != null) {
        scheduleTaskShade.setId(dbTaskShade.getId());
        this.updateById(scheduleTaskShade);
        scheduleTaskShadeInfoService.update(scheduleTaskShadeInfo, scheduleTaskShade.getTaskId());
    } else {
        this.save(scheduleTaskShade);
        scheduleTaskShadeInfoService.insert(scheduleTaskShadeInfo);
    }
    // 保存关系
    List<Long> parentTaskIdList = savaTaskDTO.getParentTaskIdList();
    List<ScheduleTaskTaskShade> scheduleTaskTaskShadeList = Lists.newArrayList();
    for (Long parentTaskId : parentTaskIdList) {
        ScheduleTaskTaskShade scheduleTaskTaskShade = new ScheduleTaskTaskShade();
        scheduleTaskTaskShade.setTenantId(scheduleTaskShade.getTenantId());
        scheduleTaskTaskShade.setTaskId(scheduleTaskShade.getTaskId());
        scheduleTaskTaskShade.setParentTaskId(parentTaskId);
        scheduleTaskTaskShadeList.add(scheduleTaskTaskShade);
    }
    // TODO 这块后面还需要考虑成环判断
    // 删除任务依赖
    tasktaskService.lambdaUpdate().eq(ScheduleTaskTaskShade::getTaskId, scheduleTaskShade.getTaskId()).remove();
    return tasktaskService.saveBatch(scheduleTaskTaskShadeList);
}
Also used : ScheduleTaskShadeInfo(com.dtstack.taier.dao.domain.ScheduleTaskShadeInfo) ScheduleTaskShadeDTO(com.dtstack.taier.scheduler.dto.schedule.ScheduleTaskShadeDTO) ScheduleTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskShade) ScheduleTaskTaskShade(com.dtstack.taier.dao.domain.ScheduleTaskTaskShade)

Aggregations

ScheduleTaskTaskShade (com.dtstack.taier.dao.domain.ScheduleTaskTaskShade)6 ScheduleTaskShade (com.dtstack.taier.dao.domain.ScheduleTaskShade)5 TaskNodeVO (com.dtstack.taier.develop.vo.schedule.TaskNodeVO)3 ServiceImpl (com.baomidou.mybatisplus.extension.service.impl.ServiceImpl)2 Deleted (com.dtstack.taier.common.enums.Deleted)2 DisplayDirect (com.dtstack.taier.common.enums.DisplayDirect)2 EScheduleJobType (com.dtstack.taier.common.enums.EScheduleJobType)2 EnvironmentContext (com.dtstack.taier.common.env.EnvironmentContext)2 Tenant (com.dtstack.taier.dao.domain.Tenant)2 ScheduleTaskTaskShadeMapper (com.dtstack.taier.dao.mapper.ScheduleTaskTaskShadeMapper)2 TenantService (com.dtstack.taier.develop.service.console.TenantService)2 UserService (com.dtstack.taier.develop.service.user.UserService)2 JobUtils (com.dtstack.taier.develop.utils.JobUtils)2 ReturnTaskDisplayVO (com.dtstack.taier.develop.vo.schedule.ReturnTaskDisplayVO)2 QueryTaskDisplayDTO (com.dtstack.taier.scheduler.dto.schedule.QueryTaskDisplayDTO)2 Lists (com.google.common.collect.Lists)2 Sets (com.google.common.collect.Sets)2 List (java.util.List)2 Map (java.util.Map)2 Set (java.util.Set)2