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;
}
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;
}
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;
}
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;
}
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);
}
Aggregations