diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobTaskController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobTaskController.java index 8d66019ed..64f4f04af 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobTaskController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/JobTaskController.java @@ -1,11 +1,12 @@ package com.aizuda.snailjob.server.web.controller; +import cn.hutool.core.lang.tree.Tree; import com.aizuda.snailjob.server.web.annotation.LoginRequired; import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.JobTaskQueryVO; import com.aizuda.snailjob.server.web.model.response.JobTaskResponseVO; import com.aizuda.snailjob.server.web.service.JobTaskService; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -19,10 +20,9 @@ import java.util.List; */ @RestController @RequestMapping("/job/task") +@RequiredArgsConstructor public class JobTaskController { - - @Autowired - private JobTaskService jobTaskService; + private final JobTaskService jobTaskService; @GetMapping("/list") @LoginRequired @@ -30,4 +30,10 @@ public class JobTaskController { return jobTaskService.getJobTaskPage(jobTaskQueryVO); } + @GetMapping("/tree/list") + @LoginRequired + public List> getTreeJobTask(JobTaskQueryVO jobTaskQueryVO) { + return jobTaskService.getTreeJobTask(jobTaskQueryVO); + } + } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobTaskQueryVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobTaskQueryVO.java index 5c6b64284..37c8aa2f4 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobTaskQueryVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/JobTaskQueryVO.java @@ -14,4 +14,5 @@ import lombok.EqualsAndHashCode; public class JobTaskQueryVO extends BaseQueryVO { private Long jobId; private Long taskBatchId; + private Long parentId; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobTaskService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobTaskService.java index 4002084db..7bfbaa38f 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobTaskService.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/JobTaskService.java @@ -1,5 +1,6 @@ package com.aizuda.snailjob.server.web.service; +import cn.hutool.core.lang.tree.Tree; import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.JobTaskQueryVO; import com.aizuda.snailjob.server.web.model.response.JobTaskResponseVO; @@ -14,4 +15,6 @@ import java.util.List; public interface JobTaskService { PageResult> getJobTaskPage(JobTaskQueryVO jobTaskQueryVO); + + List> getTreeJobTask(JobTaskQueryVO jobTaskQueryVO); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobTaskServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobTaskServiceImpl.java index ff934a051..c30d8056d 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobTaskServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobTaskServiceImpl.java @@ -1,5 +1,9 @@ package com.aizuda.snailjob.server.web.service.impl; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNode; +import cn.hutool.core.lang.tree.TreeUtil; +import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.JobTaskQueryVO; import com.aizuda.snailjob.server.web.model.response.JobTaskResponseVO; @@ -12,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -46,4 +51,26 @@ public class JobTaskServiceImpl implements JobTaskService { return new PageResult<>(pageDTO, jobTaskResponseVOs); } + + @Override + public List> getTreeJobTask(final JobTaskQueryVO queryVO) { + List jobTasks = jobTaskMapper.selectList( + new LambdaQueryWrapper() + .eq(JobTask::getParentId, queryVO.getParentId()) + .eq(Objects.nonNull(queryVO.getJobId()), JobTask::getJobId, queryVO.getJobId()) + .eq(Objects.nonNull(queryVO.getTaskBatchId()), JobTask::getTaskBatchId, queryVO.getTaskBatchId()) + // SQLServer 分页必须 ORDER BY + .orderByAsc(JobTask::getJobId)); + + List> treeNodes = new ArrayList<>(); + for (final JobTask jobTask : jobTasks) { + TreeNode treeNode = new TreeNode<>(); + treeNode.setId(jobTask.getId()); + treeNode.setName(jobTask.getTaskName()); + treeNode.setExtra(JsonUtil.parseHashMap(JsonUtil.toJsonString(jobTask), Object.class)); + treeNodes.add(treeNode); + } + + return TreeUtil.build(treeNodes, 0L); + } }