diff --git a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/task/TasksResp.java b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/task/TasksResp.java index 9429ac4..3aeba0f 100644 --- a/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/task/TasksResp.java +++ b/modules/module-ci-common-pipeline/src/main/java/cd/casic/ci/common/pipeline/resp/task/TasksResp.java @@ -1,5 +1,7 @@ package cd.casic.ci.common.pipeline.resp.task; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import lombok.Data; @Data @@ -20,7 +22,7 @@ public class TasksResp { private String taskName; //@ApiProperty(name="values",desc="任务") - private Object values; + private JSONObject taskProperties; //@ApiProperty(name="pipeline",desc="流水线id",eg="@selectOne") private String pipelineId; @@ -32,7 +34,6 @@ public class TasksResp { private String stageId; //@ApiProperty(name="task",desc="任务",eg="@selectOne") - private Object task; // 执行实例id private String instanceId; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/task/PipTask.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/task/PipTask.java index e7d7cec..9bbd617 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/task/PipTask.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/dataObject/task/PipTask.java @@ -1,6 +1,7 @@ package cd.casic.ci.process.process.dataObject.task; import lombok.Data; +import org.json.JSONObject; @Data public class PipTask { @@ -19,9 +20,6 @@ public class PipTask { //@ApiProperty(name="taskName",desc="顺序") private String taskName; - //@ApiProperty(name="values",desc="任务") - private Object values; - //@ApiProperty(name="pipeline",desc="流水线id",eg="@selectOne") private String pipelineId; @@ -30,9 +28,8 @@ public class PipTask { //@ApiProperty(name="stageId",desc="阶段",eg="@selectOne") private String stageId; - - //@ApiProperty(name="task",desc="任务",eg="@selectOne") - private Object task; + // task节点配置 + private JSONObject taskProperties; // 执行实例id private String instanceId; diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java index 625cb14..f5506bc 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/StageService.java @@ -73,7 +73,7 @@ public interface StageService { * @param stagesId 根节点id * @return 从节点列表 */ - List findOtherStage(String stagesId); + List findSecondStage(String stagesId); /** * 更新阶段任务 diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java index f713bf4..2b9f9d0 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/stage/impl/StageServiceImpl.java @@ -11,13 +11,21 @@ import cd.casic.ci.process.process.dataObject.task.PipTask; import cd.casic.ci.process.process.service.stage.StageService; import cd.casic.ci.process.process.service.task.TaskService; import cd.casic.framework.commons.exception.ServiceException; +import cd.casic.framework.commons.exception.enums.GlobalErrorCodeConstants; import cd.casic.framework.commons.util.object.BeanUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; +import org.jsoup.helper.W3CDom; import org.springframework.core.task.VirtualThreadTaskExecutor; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; import static cd.casic.ci.process.constant.PipelineFinalConstant.TASK_TYPE_CODE; @@ -90,7 +98,7 @@ public class StageServiceImpl implements StageService { //并行任务 if (StringUtils.isNotEmpty(stagesId)&& stageSort == 0){ - List otherStage = findOtherStage(stagesId); + List otherStage = findSecondStage(stagesId); PipStage oneStages = findOneStages(stagesId); PipStage stages = new PipStage(); stages.setParentId(stagesId); @@ -148,11 +156,34 @@ public class StageServiceImpl implements StageService { @Override public List findAllStagesTask(String pipelineId) { - return null; + //获取流水线主节点 + List stageMainStage = findAllMainStage(pipelineId); + if (stageMainStage.isEmpty()){ + return Collections.emptyList(); + } + List list = new ArrayList<>(); + for (PipStage stage : stageMainStage) { + String stagesId = stage.getStageId(); + //获取从节点 + List allStageStage = findOtherStageNoTask(stagesId); + List stageRespList = allStageStage.stream().map(it -> { + StageResp stageResp = new StageResp(); + BeanUtils.copyProperties(stageResp, it); + return stageResp; + }).toList(); + StageResp stageResp = new StageResp(); + BeanUtils.copyProperties(stage,stageResp); + stageResp.setStageList(stageRespList); + list.add(stageResp); + } + list.sort(Comparator.comparing(StageResp::getStageSort)); + return list; } @Override public void deleteStagesOrTask(String taskId) { + PipTask pipTask = new PipTask(); + List taskById = taskService.getTask(pipTask); } @@ -163,17 +194,21 @@ public class StageServiceImpl implements StageService { @Override public void updateStageName(StageReq stage) { - + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + if (StringUtils.isEmpty(stage.getStageName())||StringUtils.isEmpty(stage.getStageId())) { + throw new ServiceException(GlobalErrorCodeConstants.INTERNAL_SERVER_ERROR.getCode(),"阶段Id和名称蹦年为空"); + } + wrapper.eq(PipStage::getStageId,stage.getStageId()); + wrapper.set(PipStage::getStageName,stage.getStageName()); + stageDao.update(wrapper); } @Override public List findAllMainStage(String pipelineId) { - return null; - } - - @Override - public List findOtherStage(String stagesId) { - return null; + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PipStage::getPipelineId,pipelineId); + wrapper.eq(PipStage::getParentId,"-1"); + return stageDao.selectList(wrapper); } @Override @@ -230,4 +265,23 @@ public class StageServiceImpl implements StageService { } } } + public List findOtherStageNoTask(String stagesId){ + List otherStage = findSecondStage(stagesId); + List list = new ArrayList<>(); + for (PipStage stage : otherStage) { + //获取阶段配置及任务 + String otherId = stage.getStageId(); + List allStageTask = taskService.finAllStageTask(otherId); + stage.setTaskValues(allStageTask); + list.add(stage); + } + return list; + } + // 获取主stage(阶段)下的子stage + @Override + public List findSecondStage(String stageId){ + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PipStage::getParentId,stageId); + return stageDao.selectList(wrapper); + } } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/TaskService.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/TaskService.java index 355fba8..9359d60 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/TaskService.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/TaskService.java @@ -1,7 +1,9 @@ package cd.casic.ci.process.process.service.task; +import cd.casic.ci.common.pipeline.resp.task.TasksResp; import cd.casic.ci.process.process.dataObject.task.PipTask; +import java.util.List; import java.util.Objects; public interface TaskService { @@ -10,4 +12,6 @@ public interface TaskService { * */ public void taskTypeExist(String taskType); public String createTasksOrTask(PipTask tasks); + List finAllStageTask(String stageId); + List getTask(PipTask pipTask); } diff --git a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/impl/TaskServiceImpl.java b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/impl/TaskServiceImpl.java index da03d79..6c5d60e 100644 --- a/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/impl/TaskServiceImpl.java +++ b/modules/module-ci-process-biz/src/main/java/cd/casic/ci/process/process/service/task/impl/TaskServiceImpl.java @@ -13,6 +13,7 @@ import cd.casic.framework.commons.util.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.type.filter.AnnotationTypeFilter; @@ -96,6 +97,23 @@ public class TaskServiceImpl implements TaskService { createDifferentTask(tasksId,taskType,tasks.getValues()); return tasksId; } + + @Override + public List finAllStageTask(String stageId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(PipTask::getStageId,stageId); + return taskDao.selectList(wrapper); + } + + @Override + public List getTask(PipTask task) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(StringUtils.isNotEmpty(task.getTaskId()),PipTask::getTaskId,task.getTaskId()); + wrapper.eq(StringUtils.isNotEmpty(task.getPipelineId()),PipTask::getPipelineId,task.getPipelineId()); + wrapper.eq(StringUtils.isNotEmpty(task.getStageId()),PipTask::getStageId,task.getStageId()); + return taskDao.selectList(wrapper); + } + void createDifferentTask(String taskId,String taskType,Object values){ // TODO } diff --git a/ops-server/src/main/java/cd/casic/server/controller/StageController.java b/ops-server/src/main/java/cd/casic/server/controller/StageController.java index 0f080f7..ff6f8ce 100644 --- a/ops-server/src/main/java/cd/casic/server/controller/StageController.java +++ b/ops-server/src/main/java/cd/casic/server/controller/StageController.java @@ -56,223 +56,12 @@ public class StageController { @PermitAll @RequestMapping(path="/finAllStage",method = RequestMethod.POST) public CommonResult> finAllPipelineTaskOrTask(@NotNull String pipelineId){ -// List tasks = stageService.findAllStagesTask(pipelineId); - String taskStr = "[\n" + - " {\n" + - " \"stageId\": \"36a816ca6cca\",\n" + - " \"stageName\": \"源码\",\n" + - " \"createTime\": \"2024-11-25 11:09:35\",\n" + - " \"pipelineId\": \"a69119cfbbde\",\n" + - " \"stageSort\": 1,\n" + - " \"parentId\": null,\n" + - " \"code\": true,\n" + - " \"taskValues\": null,\n" + - " \"stageList\": [\n" + - " {\n" + - " \"stageId\": \"8cde3a5616e9\",\n" + - " \"stageName\": \"源码\",\n" + - " \"createTime\": \"2024-11-25 11:09:35\",\n" + - " \"pipelineId\": null,\n" + - " \"stageSort\": 1,\n" + - " \"parentId\": \"36a816ca6cca\",\n" + - " \"code\": false,\n" + - " \"taskValues\": [\n" + - " {\n" + - " \"taskId\": \"a68e6052db9f\",\n" + - " \"createTime\": \"2024-11-25 11:09:35\",\n" + - " \"taskType\": \"git\",\n" + - " \"taskSort\": 1,\n" + - " \"taskName\": \"通用Git\",\n" + - " \"values\": null,\n" + - " \"pipelineId\": null,\n" + - " \"postprocessId\": null,\n" + - " \"stageId\": \"8cde3a5616e9\",\n" + - " \"task\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"stageList\": null,\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " },\n" + - " {\n" + - " \"stageId\": \"3b1a5fdd9b6c\",\n" + - " \"stageName\": \"阶段-2\",\n" + - " \"createTime\": \"2025-03-10 14:51:43\",\n" + - " \"pipelineId\": \"a69119cfbbde\",\n" + - " \"stageSort\": 2,\n" + - " \"parentId\": null,\n" + - " \"code\": false,\n" + - " \"taskValues\": null,\n" + - " \"stageList\": [\n" + - " {\n" + - " \"stageId\": \"f35b1e576e30\",\n" + - " \"stageName\": \"并行阶段-2-1\",\n" + - " \"createTime\": \"2025-03-10 14:51:43\",\n" + - " \"pipelineId\": null,\n" + - " \"stageSort\": 1,\n" + - " \"parentId\": \"3b1a5fdd9b6c\",\n" + - " \"code\": false,\n" + - " \"taskValues\": [\n" + - " {\n" + - " \"taskId\": \"21a965370481\",\n" + - " \"createTime\": \"2025-03-10 14:51:43\",\n" + - " \"taskType\": \"maven\",\n" + - " \"taskSort\": 1,\n" + - " \"taskName\": \"Maven构建\",\n" + - " \"values\": null,\n" + - " \"pipelineId\": null,\n" + - " \"postprocessId\": null,\n" + - " \"stageId\": \"f35b1e576e30\",\n" + - " \"task\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"stageList\": null,\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " },\n" + - " {\n" + - " \"stageId\": \"871c1b69efe0\",\n" + - " \"stageName\": \"阶段-3\",\n" + - " \"createTime\": \"2025-03-10 14:52:27\",\n" + - " \"pipelineId\": \"a69119cfbbde\",\n" + - " \"stageSort\": 3,\n" + - " \"parentId\": null,\n" + - " \"code\": false,\n" + - " \"taskValues\": null,\n" + - " \"stageList\": [\n" + - " {\n" + - " \"stageId\": \"63676c8428e6\",\n" + - " \"stageName\": \"并行阶段-3-1\",\n" + - " \"createTime\": \"2025-03-10 14:52:27\",\n" + - " \"pipelineId\": null,\n" + - " \"stageSort\": 1,\n" + - " \"parentId\": \"871c1b69efe0\",\n" + - " \"code\": false,\n" + - " \"taskValues\": [\n" + - " {\n" + - " \"taskId\": \"b5eaf0832ff1\",\n" + - " \"createTime\": \"2025-03-10 14:52:27\",\n" + - " \"taskType\": \"liunx\",\n" + - " \"taskSort\": 1,\n" + - " \"taskName\": \"主机部署\",\n" + - " \"values\": null,\n" + - " \"pipelineId\": null,\n" + - " \"postprocessId\": null,\n" + - " \"stageId\": \"63676c8428e6\",\n" + - " \"task\": null,\n" + - " \"instanceId\": null\n" + - " },\n" + - " {\n" + - " \"taskId\": \"cf756d646758\",\n" + - " \"createTime\": \"2025-05-10 14:17:52\",\n" + - " \"taskType\": \"script\",\n" + - " \"taskSort\": 2,\n" + - " \"taskName\": \"执行脚本\",\n" + - " \"values\": null,\n" + - " \"pipelineId\": null,\n" + - " \"postprocessId\": null,\n" + - " \"stageId\": \"63676c8428e6\",\n" + - " \"task\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"stageList\": null,\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " },\n" + - " {\n" + - " \"stageId\": \"e9e4ac139f7b\",\n" + - " \"stageName\": \"并行阶段-3-2\",\n" + - " \"createTime\": \"2025-04-30 20:29:23\",\n" + - " \"pipelineId\": null,\n" + - " \"stageSort\": 2,\n" + - " \"parentId\": \"871c1b69efe0\",\n" + - " \"code\": false,\n" + - " \"taskValues\": [\n" + - " {\n" + - " \"taskId\": \"e46283a4b6d1\",\n" + - " \"createTime\": \"2025-04-30 20:29:23\",\n" + - " \"taskType\": \"script\",\n" + - " \"taskSort\": 1,\n" + - " \"taskName\": \"执行脚本\",\n" + - " \"values\": null,\n" + - " \"pipelineId\": null,\n" + - " \"postprocessId\": null,\n" + - " \"stageId\": \"e9e4ac139f7b\",\n" + - " \"task\": null,\n" + - " \"instanceId\": null\n" + - " },\n" + - " {\n" + - " \"taskId\": \"40740f834ce8\",\n" + - " \"createTime\": \"2025-05-10 14:17:17\",\n" + - " \"taskType\": \"script\",\n" + - " \"taskSort\": 2,\n" + - " \"taskName\": \"执行脚本\",\n" + - " \"values\": null,\n" + - " \"pipelineId\": null,\n" + - " \"postprocessId\": null,\n" + - " \"stageId\": \"e9e4ac139f7b\",\n" + - " \"task\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"stageList\": null,\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - " ],\n" + - " \"taskType\": null,\n" + - " \"taskId\": null,\n" + - " \"values\": null,\n" + - " \"taskSort\": 0,\n" + - " \"parallelName\": null,\n" + - " \"instanceId\": null\n" + - " }\n" + - "]"; - JSONArray objects = JSON.parseArray(taskStr); - List tasks = new ArrayList<>(objects.size()); - for (int i = 0; i < objects.size(); i++) { - StageResp object = objects.getObject(i, StageResp.class); - tasks.add(object); - } - return CommonResult.success(tasks); + List stageRespList = stageService.findAllStagesTask(pipelineId); + return CommonResult.success(stageRespList); } /** + * // TODO 暂时没发现哪里调用 * @pi.name:更新流水线阶段任务 * @pi.path:/stage/createStage * @pi.methodType:post @@ -281,7 +70,7 @@ public class StageController { */ @RequestMapping(path="/updateStage",method = RequestMethod.POST) public CommonResult updateStageTask(@RequestBody @Valid @NotNull StageReq stage){ -// stageService.updateStagesTask(stage); + stageService.updateStagesTask(stage); return CommonResult.success(); } @@ -295,7 +84,7 @@ public class StageController { @PermitAll @RequestMapping(path="/updateStageName",method = RequestMethod.POST) public CommonResult updateTasksStage(@RequestBody @Valid @NotNull StageReq stage){ -// stageService.updateStageName(stage); + stageService.updateStageName(stage); return CommonResult.success(); } @@ -308,7 +97,7 @@ public class StageController { */ @RequestMapping(path="/deleteStage",method = RequestMethod.POST) public CommonResult deleteTasksOrStage(@NotNull String taskId){ -// stageService.deleteStagesOrTask(taskId); + stageService.deleteStagesOrTask(taskId); return CommonResult.success(); }